2012-09-11 12 views
5

Sulla mia applicazione quando l'utente richiede un report a jQuery AJAX (utilizzando .load()) viene effettuata una chiamata a un file che esegue molte richieste di crunch numerico e mySQL. in genere sono necessari 5-6 secondi per caricare e .ajaxStart() e .ajaxStop() vengono utilizzati per visualizzare una gif di caricamento durante il caricamento.La richiesta AJAX annullata rallenta la navigazione successiva

Il problema:

Se un utente fa clic sul pulsante 'generare il rapporto' e poi cambia idea e cerca di passare a un'altra pagina l'applicazione si blocca, e non passare alla nuova pagina per 5-6 secondi. Posso dire dalla rimozione della gif di caricamento che .ajaxStop() si attiva immediatamente quando si tenta di accedere a una nuova pagina, ma sembra che la richiesta di ajax sta terminando prima che il browser carichi la pagina successiva.

È normale? Qualche suggerimento su come risolvere/ristrutturare questo?

+0

Ho solo pensato di commentare e dirvi che non siete soli! Sto avendo questo problema esatto. Dall'ispettore di Chrome e da Firebug, il browser ha annullato le richieste di rete in sospeso effettuate utilizzando AJAX e ha solo la "nuova" richiesta per la pagina successiva come "in sospeso". Tuttavia sembra ancora che si blocchi per ben 5-10 secondi prima che scelga effettivamente di allontanarsi. –

+0

Lo stesso qui: il browser ritarda sempre fino al completamento della richiesta Ajax esistente. Anche se la risposta non è più necessaria. – CoreyOConnor

+0

Stai utilizzando librerie che aggiungono credenziali OpenID tramite una richiesta interdominio? – CoreyOConnor

risposta

0

Credo che .ajaxStop() annulli solo una richiesta Ajax se il callback beforeSend restituisce false. In questo caso, la chiamata non è stata avviata e il server non ha ricevuto una richiesta. Una volta che la richiesta è stata inviata al server, la pagina non ha il controllo sulla richiesta finché non ritorna. La richiesta .ajaxStop() si attiva quando ci si allontana dalla pagina perché è stata effettuata l'ultima chiamata ajax, se è stata completata correttamente e quindi si interrompe l'esecuzione.

L'evento ajaxStop viene attivato anche se l'ultima richiesta Ajax in sospeso viene annullata restituendo false nella funzione di callback beforeSend.

Sopra è un estratto dal sito Web jquery api per il comando .ajaxStop(). Sembrerebbe che una volta che la chiamata è stata effettuata e la richiesta è stata inviata, il server sta completando la chiamata anche se l'utente sta navigando verso una pagina diversa. Se è così grande di una chiamata, potrebbe causare il ritardo che stai riscontrando.

Spero che questo aiuti.

+2

Credo che siano più preoccupati del fatto che il browser stia ancora aspettando la restituzione della richiesta AJAX, anche se stanno cercando di navigare verso un'altra pagina. Sì, il server non può essere fermato e processerà allegramente la richiesta a prescindere; ma il browser dovrebbe aver smesso _caring_. Non dovrebbe aspettare la richiesta di ritorno. –

Problemi correlati