que tenían que tratar con el mismo caso de uso en la actualidad. La aplicación en la que estoy trabajando tiene estas llamadas ajax de larga duración que pueden ser interrumpidas por 1) el usuario navegando fuera o 2) algún tipo de falla temporal de conexión/servidor. Quiero que el controlador de errores se ejecute solo para fallas de conexión/servidor y no para que el usuario navegue.
La primera vez que intenté la respuesta de Alastair Pitts, pero no funcionó porque ambas solicitudes canceladas y la falla de conexión configuraron el código de estado y readyState en 0. A continuación, intenté la respuesta de sieppl; tampoco funcionó porque en ambos casos, no se da respuesta, por lo tanto no hay encabezado.
La única solución que funcionó para mí es establecer un detector para window.onbeforeunload, que establece una variable global para indicar que la página se ha descargado. El controlador de errores puede verificar y solo llamar al controlador de errores solo si la página no se ha descargado.
var globalVars = {unloaded:false};
$(window).bind('beforeunload', function(){
globalVars.unloaded = true;
});
...
$.ajax({
error: function(jqXHR,status,error){
if (globalVars.unloaded)
return;
}
});
Para mí textStatus es "abortar". Veo que esta es una vieja pregunta, tal vez ha cambiado. – jackocnr
Para mí, sigue siendo "error". –