Umgang mit jQuery-Ajax-Post-Fehlern, wenn von einer Seite wegnavigiert wird
Lesezeit: 4 Minuten
Steve Walsch
Gibt es eine Möglichkeit, den Fehler einer Ajax-Anforderung in JQuery so zu behandeln, dass der resultierende Fehler ignoriert wird, wenn der Benutzer von der Seite wegnavigiert?
$(document).ready(function() {
$.ajax( {
url:'/server/url/',
type: 'POST',
data: {some..data},
success:function(response) { do stuff with response },
error: function(xhr, textStatus, errorThrown) {
// Don't raise this alert if user has navigated away from the page
alert('error');
}
});
Mich würde interessieren, ob jemand eine saubere Möglichkeit kennt, damit umzugehen? Ich weiß, dass Sie eine Logik in a erstellen könnten $(window).bind("beforeunload", function(){}) Methode, aber ich würde es vorziehen, wenn es eine Möglichkeit gäbe, mit der Situation umzugehen, ohne dies zu tun, da Chrome sie anscheinend nicht mehr unterstützt. Gibt es zum Beispiel einen bestimmten Fehler, der in diesem Fall zurückgegeben wird?
Vielen Dank.
Da der Aufruf an den Server geht, glaube ich nicht, dass er genug Wissen hat, um eine Antwort unterschiedlich zurückzugeben, je nachdem, ob der Benutzer von dieser Seite navigiert ist oder nicht. Gibt es irgendwo ein Beispiel für dieses Verhalten? Es scheint seltsam, dass ein Skript von einer anderen Seite weiter ausgeführt wird, nachdem Sie diese Seite verlassen haben.
– Will Buck
10. Februar 2012 um 14:09 Uhr
ich denken Das Skript wird tatsächlich nicht mehr ausgeführt und es wird ein Fehler ausgegeben, da es vorzeitig beendet wird.
– Steve Walsh
10. Februar 2012 um 14:21 Uhr
Sobald Sie wegnavigiert sind, geht Ihr AJAX-Aufruf in den Bit-Eimer. Auf dem Client gibt es keinen Listener mehr, um Nachrichten von dieser Anfrage zu empfangen.
– Diodeus – James MacFarlane
10. Februar 2012 um 14:23 Uhr
Der Fehlerrückruf wird aufgerufen. Der xhr.status ist jedoch 0, was vermutlich zum Filtern dieser Bedingung verwendet werden könnte.
– Steve Walsh
10. Februar 2012 um 15:18 Uhr
mögliches Duplikat von jQuery AJAX löst Fehlerrückruf beim Entladen des Fensters aus?
– Leopard
4. Juni 2012 um 15:11 Uhr
Steve Walsch
Es sieht so aus, als ob die Antwort darauf darin besteht, den jqXHR.status zu untersuchen. Das XMLHttpRequest-Spezifikation beschreibt diese Schritte zum Festlegen des Status:
Das Status -Attribut muss das Ergebnis der Ausführung dieser Schritte zurückgeben:
Wenn der Zustand UNSENT oder OPENED ist, 0 zurückgeben und diese Schritte beenden.
Wenn das Fehler-Flag gesetzt ist, 0 zurückgeben und diese Schritte beenden.
HINWEIS auch: Das Fehler-Flag zeigt eine Art von Netzwerkfehler oder Anforderungsabbruch an. Es ist anfänglich nicht gesetzt und wird während des DONE-Zustands verwendet.
Soweit ich weiß, sollte diese Codeprüfung das Problem beheben:
Genau die Antwort, die ich gesucht habe. Das Binden neuer Ereignisse ist Over-Engineering.
– acht Augen
29. März 2013 um 20:03 Uhr
Gibt es eine Möglichkeit, zwischen dem Fall, dass jemand von der Seite wegnavigiert, und anderen Netzwerkproblemen (Zeitüberschreitung, Host nicht gefunden usw.) zu unterscheiden?
– Krystian Cybulski
20. Mai 2013 um 21:51 Uhr
Dies Artikel sagt das Bis die Antwort zurückkommt, ist die Seite entladen und die Callback-Funktion existiert nicht mehrwie funktioniert der Fehlerrückruf überhaupt zuverlässig?
– Winterlicht
28. August 2013 um 11:03 Uhr
Sollte das nicht sein xhr.status == 0 stattdessen?
Das Überprüfen des Status hat bei mir nicht funktioniert, aber
// Ignore incomplete requests, likely due to navigating away from the page
if (jqXHR.readyState < 4) {
return true;
}
in der Fehlerbehandlungsroutine tat (4 ist DONE).
Wenn der Serverprozess existiert, ist der jqXHR.readyState-Wert 0. Dies sollte eigentlich an die Fehlerbehandlung gehen, da es nicht so ist, dass der Benutzer wegnavigiert.
– Lorenz03Tx
6. Oktober 2014 um 20:37 Uhr
Ich kann nicht zustimmen. Ich verwende aktuelles FireFox und jQuery v2.0.0. Wenn ich während einer Ajax-Anfrage einem Link folge, endet die Ajax-Anfrage mit jqXHR.readyState = 4 und jqXHR.status = 404.
– Simon
4. Oktober 2016 um 13:02 Uhr
Ich musste mich auch schon ein paar Mal mit diesem Problem auseinandersetzen.
Ich würde die Bindung an die empfehlen $(window).unload Ereignis, indem Sie irgendwo eine Variable setzen, z. B. in Ihrem Namensraum (App.unloading = true) und dann in Ajax-Fehlerrückrufen testen.
Siehe stackoverflow.com/questions/1370322/… für alternative Ansätze. Vielleicht könnte sich die Kombination von Unload Event & Flag mit Statusprüfung als ausreichend erweisen.
– ori
10. Februar 2012 um 15:23 Uhr
12064300cookie-checkUmgang mit jQuery-Ajax-Post-Fehlern, wenn von einer Seite wegnavigiert wirdyes
Da der Aufruf an den Server geht, glaube ich nicht, dass er genug Wissen hat, um eine Antwort unterschiedlich zurückzugeben, je nachdem, ob der Benutzer von dieser Seite navigiert ist oder nicht. Gibt es irgendwo ein Beispiel für dieses Verhalten? Es scheint seltsam, dass ein Skript von einer anderen Seite weiter ausgeführt wird, nachdem Sie diese Seite verlassen haben.
– Will Buck
10. Februar 2012 um 14:09 Uhr
ich denken Das Skript wird tatsächlich nicht mehr ausgeführt und es wird ein Fehler ausgegeben, da es vorzeitig beendet wird.
– Steve Walsh
10. Februar 2012 um 14:21 Uhr
Sobald Sie wegnavigiert sind, geht Ihr AJAX-Aufruf in den Bit-Eimer. Auf dem Client gibt es keinen Listener mehr, um Nachrichten von dieser Anfrage zu empfangen.
– Diodeus – James MacFarlane
10. Februar 2012 um 14:23 Uhr
Der Fehlerrückruf wird aufgerufen. Der xhr.status ist jedoch 0, was vermutlich zum Filtern dieser Bedingung verwendet werden könnte.
– Steve Walsh
10. Februar 2012 um 15:18 Uhr
mögliches Duplikat von jQuery AJAX löst Fehlerrückruf beim Entladen des Fensters aus?
– Leopard
4. Juni 2012 um 15:11 Uhr