Ich musste mich heute mit dem gleichen Anwendungsfall befassen. Die App, an der ich arbeite, hat diese lang laufenden Ajax-Aufrufe, die unterbrochen werden können durch 1) den Benutzer, der weg navigiert, oder 2) eine Art vorübergehenden Verbindungs- / Serverausfall. Ich möchte, dass der Fehlerbehandler nur für Verbindungs- / Serverfehler ausgeführt wird und nicht für den Benutzer, der weg navigiert.
Ich habe zuerst die Antwort von Alastair Pitts versucht, aber es hat nicht funktioniert, da sowohl abgebrochene Anforderungen als auch Verbindungsfehler den Statuscode und readyState auf 0 gesetzt haben. Als nächstes habe ich die Antwort von sieppl versucht. hat auch nicht funktioniert, da in beiden Fällen keine Antwort gegeben wird, also kein Header.
Die einzige Lösung, die für mich funktioniert hat, besteht darin, einen Listener für window.onbeforeunload festzulegen, der eine globale Variable festlegt, die angibt, dass die Seite entladen wurde. Der Fehlerbehandler kann dann den Fehlerbehandler nur dann überprüfen und aufrufen, wenn die Seite nicht entladen wurde.
var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
globalVars.unloaded = true;
});
...
$.ajax({
error: function(jqXHR,status,error){
if (globalVars.unloaded)
return;
}
});