Мне приходилось иметь дело с тем же случаем использования сегодня. Приложение, над которым я работаю, имеет эти длительные вызовы ajax, которые могут быть прерваны: 1) удаленным пользователем или 2) каким-то временным соединением / ошибкой сервера. Я хочу, чтобы обработчик ошибок запускался только при сбое соединения / сервера, а не при переходе пользователя.
Сначала я попробовал ответ Аластера Питта, но он не работал, потому что и прерванные запросы, и сбой соединения установили код состояния и readyState на 0. Затем я попробовал ответ sieppl; также не работает, потому что в обоих случаях ответ не дается, поэтому заголовок отсутствует.
Единственное решение, которое сработало для меня, это установить прослушиватель для window.onbeforeunload, который устанавливает глобальную переменную, чтобы указать, что страница была выгружена. Затем обработчик ошибок может проверять и вызывать обработчик ошибок только в том случае, если страница не была выгружена.
var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
globalVars.unloaded = true;
});
...
$.ajax({
error: function(jqXHR,status,error){
if (globalVars.unloaded)
return;
}
});