Сьогодні мені довелося мати справу з тим самим випадком використання. Додаток, над яким я працюю, має ці тривалі дзвінки 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;
}
});