2012-09-11 7 views
5

Auf meiner Anwendung, wenn Benutzer einen Bericht anfordert, ein Jquery AJAX (mit .load()) Aufruf an eine Datei, die eine Menge von Zahlenverarbeitung und mySQL-Anfragen. es dauert im Allgemeinen 5-6 Sekunden, um geladen zu werden, und .ajaxStart() und .ajaxStop() werden verwendet, um ein Lade-GIF während der Last anzuzeigen.Abgebrochen AJAX-Anfrage verlangsamt nachfolgende Navigation

Das Problem:

Wenn ein Benutzer klickt auf den ‚Bericht erstellen‘ klicken und dann ändert ihre Meinung und versucht, auf eine andere Seite der Anwendung hängt zu navigieren, und navigieren Sie nicht auf die neue Seite für 5-6 Sekunden. Ich kann anhand der Entfernung des Lade-GIF erkennen, dass .ajaxStop() sofort ausgelöst wird, wenn versucht wird, zu einer neuen Seite zu navigieren, aber es scheint, dass die Ajax-Anfrage beendet wird, bevor der Browser die nächste Seite lädt.

Ist das normales Verhalten? Irgendwelche Vorschläge, wie das zu beheben/restrukturieren?

+0

Ich dachte nur, ich würde kommentieren und Ihnen sagen, Sie sind nicht allein! Ich habe genau dieses Problem. Im Chrome-Inspektor und in Firebug hat der Browser die ausstehenden Netzwerkanforderungen, die mit AJAX gestellt wurden, abgebrochen und hat nur die "neue" Anforderung für die nächste Seite als "ausstehend". Dennoch scheint es noch für gut 5 bis 10 Sekunden zu hängen, bevor es sich tatsächlich dazu entscheidet, weg zu navigieren. –

+0

Das gleiche gilt hier: Der Browser verzögert immer, bis die bestehende Ajax-Anfrage abgeschlossen ist. Auch wenn die Antwort nicht mehr benötigt wird. – CoreyOConnor

+0

Verwenden Sie Bibliotheken, die OpenID-Anmeldeinformationen über eine domänenübergreifende Anforderung hinzufügen? – CoreyOConnor

Antwort

0

Ich glaube .ajaxStop() löscht nur eine Ajax-Anfrage, wenn der Callback vor dem Senden false zurückgibt. In diesem Fall wurde der Anruf nicht initiiert und der Server hat keine Anfrage erhalten. Sobald die Anfrage an den Server gesendet wurde, hat die Seite keine Kontrolle mehr über die Anfrage, bis sie zurückkommt. Die Anforderung .ajaxStop() wird ausgelöst, wenn von der Seite weg navigiert wird, weil der letzte Ajax-Aufruf erfolgreich ausgeführt wurde und daher die Ausführung beendet wird.

Das ajaxStop-Ereignis wird auch ausgelöst, wenn die letzte ausstehende Ajax-Anforderung abgebrochen wird, indem innerhalb der Funktion prevSend callback false zurückgegeben wird.

Oben ist ein Auszug aus der jquery api Website für den .ajaxStop() Befehl. Es sieht so aus, als ob der Server den Anruf beendet, sobald der Anruf getätigt wurde und die Anfrage gesendet wurde, obwohl der Benutzer zu einer anderen Seite navigiert. Wenn es so groß ist, kann es die Verzögerung verursachen.

Hoffe, das hilft.

+2

Ich glaube, dass sie sich mehr Sorgen machen, dass der Browser immer noch auf die Rückkehr der AJAX-Anfrage zu warten scheint, obwohl sie versuchen, zu einer anderen Seite zu navigieren. Ja, der Server kann nicht gestoppt werden und verarbeitet die Anfrage trotzdem munter. aber der Browser sollte _caring_ gestoppt haben. Es sollte nicht auf die Anfrage warten, um zurückzukehren. –

Verwandte Themen