Umgang mit jQuery-Ajax-Post-Fehlern, wenn von einer Seite wegnavigiert wird

Lesezeit: 4 Minuten

Benutzer-Avatar
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

Benutzer-Avatar
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:

  1. Wenn der Zustand UNSENT oder OPENED ist, 0 zurückgeben und diese Schritte beenden.

  2. Wenn das Fehler-Flag gesetzt ist, 0 zurückgeben und diese Schritte beenden.

  3. Gibt den HTTP-Statuscode zurück.1

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:

    if (xhr.status == 0)
        alert('error');

1https://web.archive.org/web/20120204040047/http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute

  • 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?

    – Benutzer2141650

    17. September 2013 um 19:00 Uhr

  • error: function(xhr, textStatus, errorThrown) {if (xhr.readyState === 4) alert(error); }

    – Nikolaus

    29. Juli 2014 um 18:36 Uhr

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.

Sehen http://api.jquery.com/unload/

  • Dies scheint nicht für alle Browser zu funktionieren:code.google.com/p/chromium/issues/detail?id=4422

    – Steve Walsh

    10. Februar 2012 um 15:12 Uhr


  • 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

1206430cookie-checkUmgang mit jQuery-Ajax-Post-Fehlern, wenn von einer Seite wegnavigiert wird

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy