2011-09-20 8 views
6

Sto scrivendo un'applicazione jQuery Mobile che richiede l'autenticazione dell'utente. Lo stesso utente non può avere la sua sessione aperta da più postazioni: se l'utente accede da un altro browser, la sessione precedente è contrassegnata come morta.Come gestire gli errori di modifica della pagina in jQuery Mobile

Se l'utente tenta di passare a un'altra pagina con il browser con la sessione non valida, viene visualizzato il messaggio "Errore durante il caricamento della pagina". Questo è male perché l'utente potrebbe non sapere perché sta ottenendo questo errore. È possibile accedere all'evento di errore in modo da poter verificare lo stato della sessione e reindirizzare l'utente alla pagina di accesso se la sessione è morta?

risposta

1

Ho finito biforcano jQuery Mobile e aggiungendo la possibilità di aggiungere gestore di errore personalizzato: https://github.com/jquery/jquery-mobile/pull/2504 Penso che questo superiore a gli altri suggerimenti perché non aggiunge alcun sovraccarico tranne quando si verifica effettivamente l'errore.

AGGIORNAMENTO: Ci sarà un nuovo evento pageloadfail in jQuery Mobile RC1. Ciò risolverà questo problema elegantemente e secondo gli standard del progetto.

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

Questo è un modo per risolverlo, ma potrebbe essere un po 'eccessivo. Ciò equivarrebbe a raddoppiare la quantità di richieste e poiché l'applicazione viene utilizzata principalmente su dispositivi mobili, questo potrebbe diventare un problema evidente. –

2

correlati:

si potrebbe usare qualcosa di simile

pagebeforeshow

Attivato nella pagina visualizzata, prima che inizi la transizione.

Esempio (pseudo codice):

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

Questa è una soluzione leggermente migliore. Tuttavia questo sembra ancora un po 'eccessivo. Stavo pensando di fare un fork di jQuery Mobile e aggiungere un evento di errore sottoscrivibile in modo da poter gestire l'errore solo quando succede. Quindi, di nuovo l'ottimizzazione prematura è pericolosa, quindi forse per il momento farò il mio suggerimento. :) –

+0

Dopo tutto non è stato d'aiuto. gli eventi pagebeforeshow e pagebeforehide non vengono attivati ​​se il caricamento della pagina fallisce. –

+0

Il mio prossimo suggerimento sarebbe quello di usare AJAX e controllare la risposta di Apache, Esempio: se ottieni una risposta 200 sei bravo, altrimenti ...potrebbe essere necessario mappare più risposte e questo è solo un concetto –

3

Come sull'evento

pagechangefailed 

?

Viene generato quando il pageload fallisce, il che sembra essere il caso.

Maggiori informazioni http://jquerymobile.com/test/docs/api/events.html

+0

Sì, questo è disponibile nelle versioni recenti. Tuttavia ho avuto questo problema a settembre, quando questo non è stato ancora implementato. Nella mia risposta ho descritto l'evento pageloadfailed. A quanto pare, potrebbe anche bastare lo scambio di pagine. –

Problemi correlati