Wie erhalte ich einen Ajax-Abfrage-Post-Fehler?

Ich möchte den Fehler abfangen und die entsprechende Nachricht anzeigen, wenn die Ajax-Anfrage fehlschlägt.

Mein Code ist wie folgt, aber ich konnte die fehlgeschlagene Ajax-Anfrage nicht abfangen.

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; }); } 

Ich habe herausgefunden, dass “Fehler in Ajax” niemals ausgeführt wird, wenn die Ajax-Anfrage fehlgeschlagen ist.

Wie gehe ich mit dem Ajax-Fehler um und zeige die entsprechende Meldung, wenn es fehlschlägt?

   

Seit jQuery 1.5 können Sie den Mechanismus für zurückgestellte Objekte verwenden:

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

Ein anderer Weg ist die Verwendung von .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 hat verschobene Objekte hinzugefügt, die dies gut handhaben. Rufen Sie einfach $.post und hängen Sie alle Handler an, die Sie nach dem Anruf möchten. Mit verzögerten Objekten können Sie sogar mehrere Erfolgs- und Fehlerbehandlungsroutinen anhängen.

Beispiel:

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

Vor jQuery 1.8 hieß die function done success und fail heißt 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) }); 

Ein einfacher Weg besteht darin, ajaxError zu implementieren:

Wenn eine Ajax-Anforderung mit einem Fehler abgeschlossen wird, triggers jQuery das Ereignis ajaxError aus. Alle Handler, die mit der .ajaxError () – Methode registriert wurden, werden zu diesem Zeitpunkt ausgeführt.

Beispielsweise:

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

Ich würde vorschlagen, die AjaxError- Dokumentation zu lesen . Es ist mehr als der oben gezeigte einfache Anwendungsfall – hauptsächlich akzeptiert sein Callback eine Reihe von Parametern:

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

Ich habe dieses Problem behoben, indem ich den datatype: 'json' in meinem jQuery-Ajax-Aufruf deklariert habe.