Estoy tratando de implementar un controlador de errores HTTP predeterminado de jQuery para llamadas AJAX. Implementé el controlador de errores predeterminado para errores de aplicaciones genéricas de la siguiente manera:
$(document).ajaxError(function(event, jqXHR, settings, thrownError) { switch (jqXHR.status) { case 403: console.log('Forbidden, go away!'); break; case 404: console.log('Resource not found :O'); break; case 422: console.log('Unprocessable entity.'); break; case 500: console.log('Someone have to pay for this!'); break; default: console.log('Anyone knows what is going on here?'); } });Ahora, lo que me gustaría lograr es anular un código de estado específico dentro de una sola llamada AJAX. Como por ejemplo
$.ajax({ ... error: function(jqXHR, textStatus, errorThrown) { if(jqXHR.status === 404){ console.log('The requested unicorn is actually missing'); } } })En este momento, si implemento como se muestra arriba, se mostrarán ambos mensajes
>The requested unicorn is actually missing >Resource not found :O mientras solo intento obtener el mensaje The requested unicorn is actually missing .
Establecer global: false en la configuración de llamada AJAX única implica ignorar todas las funciones AJAX globales dentro de esa llamada AJAX y, lamentablemente, esa no es una solución viable para mi aplicación.
¿Alguna idea? ¡Gracias!
puedes hacer lo siguiente
$.ajax({ handleErrors: [404], ... error: function(jqXHR, textStatus, errorThrown) { if(jqXHR.status === 404){ console.log('The requested unicorn is actually missing'); } } });luego, en su controlador global, verifique si se maneja el error
$(document).ajaxError(function(event, jqXHR, settings, thrownError) { if (settings.handleErrors && settings.handleErrors.indexOf(jqXHR.status) !== -1) { return; } switch (jqXHR.status) { case 403: console.log('Forbidden, go away!'); break; case 404: console.log('Resource not found :O'); break; case 422: console.log('Unprocessable entity.'); break; case 500: console.log('Someone have to pay for this!'); break; default: console.log('Anyone knows what is going on here?'); } });