2012-01-18 11 views
12

tengo el siguiente código para el control de errores predeterminado jQuery AJAX:jQuery.ajaxSetup: error de anulación con statusCode

$.ajaxSetup({ 
    error : function(jqXHR, textStatus, errorThrown) { 
     alert("Error: " + textStatus + ": " + errorThrown); 
    }, 
    statusCode : { 
     404: function() { 
      alert("Element not found."); 
     } 
    } 
}); 

Sin embargo, cuando 404 sucede, ambas funciones se upcalled: primero error, entonces statusCode , entonces veo 2 alertas consecutivas.

¿Cómo evitar este comportamiento y obtener de error de devolución de llamada sólo si statusCode no se upcalled?

+0

Eliminando statucCode.404? –

+1

No-no. Quiero un mensaje específico en el caso de 404, y el predeterminado de lo contrario. – weekens

+4

Estoy contigo @weekens. La falta de un 'else' en las entradas de statusCode o, de no ser así, una forma de llamar al manejador de statusCode primero y permitirle suprimir el manejador de errores genérico si lo desea, hace que la opción de estado de todo el código sea inútil. Solo se puede usar si tiene entradas de statusCode para cada posible código de error, no es razonable. Espero que la gente de jQuery reconsidere esta arquitectura. – enigment

Respuesta

23

¿Qué tal sólo la comprobación de código de estado 404 en el controlador de error?

$.ajaxSetup({ 
    error : function(jqXHR, textStatus, errorThrown) { 
     if (jqXHR.status == 404) { 
      alert("Element not found."); 
     } else { 
      alert("Error: " + textStatus + ": " + errorThrown); 
     } 
    } 
}); 
11

Prueba esto:

$.ajaxSetup({ 
error : function(jqXHR, textStatus, errorThrown) { 
    if(jqXHR.status === 404) { 
     alert("Element not found."); 
    } else { 
     alert("Error: " + textStatus + ": " + errorThrown); 
    } 
} 
}); 
+1

+1 también. Pero == parece ser mejor que === en este caso. – weekens