miałem do czynienia dzisiaj z samego przypadku użycia. Aplikacja, nad którą pracuję, ma te długo działające wywołania ajax, które mogą być przerywane przez 1) nawigację użytkownika lub 2) tymczasową awarię połączenia/serwera. Chcę, aby procedura obsługi błędów działała tylko w przypadku błędu połączenia/serwera, a nie w przypadku nawigacji użytkownika.
Najpierw wypróbowałem odpowiedź Alastaira Pittsa, ale nie zadziałało, ponieważ zarówno przerwane żądania, jak i niepowodzenie połączenia ustawiły kod statusu i readyState na 0. Następnie próbowałem odpowiedzi sieppl; również nie działał, ponieważ w obu przypadkach nie podano odpowiedzi, a więc nie ma nagłówka.
Jedynym rozwiązaniem, które zadziałało, jest ustawienie detektora dla window.onbeforeunload, który ustawia zmienną globalną wskazującą, że strona została wyładowana. Procedura obsługi błędów może następnie sprawdzić i wywołać procedurę obsługi błędów tylko wtedy, gdy strona nie została rozładowana.
var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
globalVars.unloaded = true;
});
...
$.ajax({
error: function(jqXHR,status,error){
if (globalVars.unloaded)
return;
}
});
Dla mnie textStatus jest "przerwać". Widzę, że to stare pytanie - może się zmieniło. – jackocnr
Dla mnie nadal jest to "błąd". –