Come posso rilevare un errore di post della query Ajax?

Vorrei rilevare l’errore e mostrare il messaggio appropriato se la richiesta Ajax fallisce.

Il mio codice è simile al seguente, ma non sono riuscito a cogliere la richiesta Ajax che non ha funzionato.

function getAjaxData(id) { $.post("status.ajax.php", {deviceId : id}, function(data){ var tab1; if (data.length>0) { tab1 = data; } else { tab1 = "Error in Ajax"; } return tab1; }); } 

Ho scoperto che “Errore in Ajax” non viene mai eseguito quando la richiesta Ajax non è riuscita.

Come gestisco l’errore Ajax e mostro il messaggio appropriato se fallisce?

Dal momento che jQuery 1.5 è ansible utilizzare il meccanismo degli oggetti posticipati:

 $.post('some.php', {name: 'John'}) .done(function(msg){ }) .fail(function(xhr, status, error) { // error handling }); 

Un altro modo è usare .ajax :

 $.ajax({ type: "POST", url: "some.php", data: "name=John&location=Boston", success: function(msg){ alert( "Data Saved: " + msg ); }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("some error"); } }); 

jQuery 1.5 ha aggiunto oggetti posticipati che gestiscono questo bene. Basta chiamare $.post e albind eventuali gestori che desideri dopo la chiamata. Gli oggetti posticipati consentono anche di albind più gestori di errori e successi.

Esempio:

 $.post('status.ajax.php', {deviceId: id}) .done( function(msg) { ... } ) .fail( function(xhr, textStatus, errorThrown) { alert(xhr.responseText); }); 

Prima di jQuery 1.8, la funzione done era chiamata success e il fail veniva chiamato error .

 $.ajax({ type: 'POST', url: 'status.ajax.php', data: { deviceId: id }, success: function(data){ // your code from above }, error: function(xhr, textStatus, error){ console.log(xhr.statusText); console.log(textStatus); console.log(error); } }); 
 $.post('someUri', { }, function(data){ doSomeStuff }) .fail(function(error) { alert(error.responseJSON) }); 

Un modo semplice è implementare ajaxError :

Ogni volta che una richiesta Ajax viene completata con un errore, jQuery triggers l’evento ajaxError. Tutti i gestori che sono stati registrati con il metodo .ajaxError () vengono eseguiti in questo momento.

Per esempio:

 $('.log').ajaxError(function() { $(this).text('Triggered ajaxError handler.'); }); 

Suggerirei di leggere la documentazione di ajaxError . Fa più del semplice caso d’uso dimostrato sopra – principalmente la sua callback accetta un numero di parametri:

 $('.log').ajaxError(function(e, xhr, settings, exception) { if (settings.url == 'ajax/missing.html') { $(this).text('Triggered ajaxError handler.'); } }); 

Ho risolto questo problema dichiarando il datatype: 'json' nella mia chiamata jQuery ajax.