jQuery: come ottenere il codice di stato HTTP dal metodo $ .ajax.error?

Sto usando jQuery per fare una richiesta AJAX. Voglio eseguire diverse azioni indipendentemente dal fatto che il codice di stato HTTP sia un errore 400 o un errore 500. Come posso raggiungere questo objective?

$.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, error: function(data){ //get the status code if (code == 400) { alert('400 status code! user error'); } if (code == 500) { alert('500 status code! server error'); } }, }); 

Aggiornare:

@GeorgeCummins ha detto che “sembrava strano” lavorare con il corpo della risposta. Questa è la prima volta che ho tentato di fare questo genere di cose. Il mio approccio non è una best practice? Cosa raccomanderesti? Ho creato un’altra domanda StackOverflow per questo qui: quale risposta / codice di stato dovrei inviare a una richiesta AJAX quando c’è un errore di convalida utente / modulo?

Se stai usando jQuery 1.5, lo statusCode funzionerà.

Se stai usando jQuery 1.4, prova questo:

 error: function(jqXHR, textStatus, errorThrown) { alert(jqXHR.status); alert(textStatus); alert(errorThrown); } 

Dovresti vedere il codice di stato dal primo avviso.

Dovresti creare una mappa di azioni usando l’impostazione statusCode :

 $.ajax({ statusCode: { 400: function() { alert('400 status code! user error'); }, 500: function() { alert('500 status code! server error'); } } }); 

Riferimento (scorrere a: ‘statusCode’)

EDIT (In risposta ai commenti)

Se è necessario agire in base ai dati restituiti nel corpo della risposta (che a me sembra strano), sarà necessario utilizzare l’ error: invece di statusCode:

 error:function (xhr, ajaxOptions, thrownError){ switch (xhr.status) { case 404: // Take action, referencing xhr.responseText as needed. } } 

uso

  statusCode: { 404: function() { alert('page not found'); } } 

 $.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, statusCode: { 404: function() { alert('page not found'); }, 400: function() { alert('bad request'); } } }); 

Un’altra soluzione è utilizzare la funzione response.status. Questo ti darà lo stato http che viene restituito dalla chiamata ajax.

 function checkHttpStatus(url) { $.ajax({ type: "GET", data: {}, url: url, error: function(response) { alert(url + " returns a " + response.status); }, success() { alert(url + " Good link"); } }); }