2011-09-20 22 views
6

Piszę aplikację jQuery Mobile, która wymaga uwierzytelnienia użytkownika. Ten sam użytkownik nie może otworzyć swojej sesji z wielu lokalizacji: jeśli użytkownik loguje się z innej przeglądarki, poprzednia sesja jest oznaczona jako martwa.Jak radzić sobie z błędami zmiany strony w jQuery Mobile

Jeśli użytkownik spróbuje przejść do innej strony w przeglądarce z martwą sesją, wyświetlony zostanie komunikat "Błąd podczas ładowania strony". Jest to złe, ponieważ użytkownik może nie wiedzieć, dlaczego otrzymuje ten błąd. Czy możliwe jest dotknięcie zdarzenia błędu, aby sprawdzić stan sesji i przekierować użytkownika na stronę logowania, jeśli sesja jest martwa?

Odpowiedz

1

skończyło się rozwidlone jQuery Mobile i dodając możliwość dodania obsługi niestandardowych błędzie: https://github.com/jquery/jquery-mobile/pull/2504 myślę, że to lepsze inne sugestie, ponieważ nie dodaje żadnych kosztów ogólnych, chyba że faktycznie wystąpi błąd.

AKTUALIZACJA: W jQuery Mobile RC1 pojawi się nowe zdarzenie o napędzie zastępczym. To rozwiąże ten problem elegancko i zgodnie ze standardami projektu.

0
$(a).click(function(){ 
    // check for session? 
}); 
+0

To jeden sposób rozwiązywać je, ale to może być nieco nadmierne. To by (około) podwoiło liczbę wniosków, a ponieważ aplikacja jest używana głównie na urządzeniach mobilnych, może to stanowić zauważalny problem. –

2

pokrewne:

Można użyć coś takiego

pagebeforeshow

Wyzwalany na wyświetlanej stronie przed rozpoczęciem przejścia.

Przykład (pseudo kod):

$('#pageId').live('pagebeforeshow',function(event, ui){ 
    // check session here 
    if(!$session) { 
     // redirect to login 
     $.mobile.changePage('#login'); 
    } 
}); 
+0

To jest trochę lepsze rozwiązanie. Jednak nadal wydaje się to nieco przesadą. Zastanawiałem się nad zrobieniem widelca jQuery Mobile i dodaniem subskrybowalnego zdarzenia błędu, więc mogłem poradzić sobie z błędem tylko wtedy, gdy to się zdarzy. Z drugiej strony optymalizacja przedwczesna jest niebezpieczna, więc na razie mogę ją przetasować z twoją sugestią. :) –

+0

To jednak nie pomogło. Zdarzenia pagebeforeshow i pagebeforehide nie są wyzwalane, jeśli ładowanie strony nie powiedzie się. –

+0

Moja następna sugestia to użycie AJAX i sprawdzenie odpowiedzi Apache, Przykład: jeśli uzyskasz odpowiedź 200, jesteś dobry, inaczej ...może potrzebować zmapować więcej odpowiedzi, a to jest po prostu koncepcja –

3

Jak o zdarzeniu

pagechangefailed 

?

Jest uruchamiany, gdy rozłączenie się nie powiedzie, co wydaje się być.

Więcej informacji na http://jquerymobile.com/test/docs/api/events.html

+0

Tak, jest dostępna w najnowszych wersjach. Jednak miałem ten problem z powrotem we wrześniu, kiedy to jeszcze nie zostało wdrożone. W mojej własnej odpowiedzi opisałem wydarzenie, w którym wystąpił błąd strony. Wygląda na to, że i pagechangefailed może wystarczyć. –

Powiązane problemy