Quiero tener un método global de manejo de errores para llamadas ajax, esto es lo que tengo ahora:
$.ajaxSetup({ error: function (XMLHttpRequest, textStatus, errorThrown) { displayError(); } }); Necesito ignorar el error de aborted . errorThrown es nulo y textStatus es error . ¿Cómo verifico aborted ?
Tuve que lidiar con el mismo caso de uso hoy. 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 o 2) algún tipo de falla temporal de conexión/servidor. Quiero que el controlador de errores se ejecute solo en caso de falla de conexión/servidor y no para que el usuario se vaya.
Primero probé la respuesta de Alastair Pitts, pero no funcionó porque tanto las solicitudes abortadas como la falla de conexión establecieron el código de estado y readyState en 0. Luego, probé 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 oyente 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; } });En jQuery moderno, puede verificar si request.statusText es igual a 'abort' :
error: function (request, textStatus, errorThrown) { if (request.statusText =='abort') { return; } }Algo que encontré es que cuando hay una solicitud abortada, el status y/o readyState igual a 0 .
En mi controlador de errores global, tengo una marca en la parte superior del método:
$(document).ajaxError(function (e, jqXHR, ajaxSettings, thrownError) { //If either of these are true, then it's not a true error and we don't care if (jqXHR.status === 0 || jqXHR.readyState === 0) { return; } //Do Stuff Here });He encontrado que esto funciona perfectamente para mí. Espero que esto te ayude a ti, o a cualquier otra persona que se encuentre con esto :)