2012-01-18 11 views
12

Ho il seguente codice per la gestione degli errori jQuery AJAX predefinito:jQuery.ajaxSetup: errore di override con statusCode

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

Tuttavia, quando 404 accade, entrambe le funzioni sono upcalled: prima errore, quindi statusCode , quindi vedo 2 avvisi consecutivi.

Come impedire questo comportamento e ottenere errore richiamata solo se statusCode non è stato upcalled?

+0

Rimuovendo statucCode.404? –

+1

No-no. Voglio un messaggio specifico in caso di 404, e quello predefinito altrimenti. – weekens

+4

Sono con te @weekens. La mancanza di un 'else' sulle voci statusCode, o l'assenza di questo, un modo per chiamare prima il gestore statusCode e consentirgli di sopprimere il gestore di errori generico se lo desidera, rende l'opzione statusCode intera IMO inutile. È utilizzabile solo se si hanno voci di statusCode per ogni possibile codice di errore, non ragionevole. Spero che la gente di jQuery riconsideri questa architettura. – enigment

risposta

23

ne dite solo controllando il codice di stato 404 nel vostro gestore degli errori?

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

Prova questo:

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

+1. Ma == sembra essere meglio di === in questo caso. – weekens

Problemi correlati