it-swarm.com.de

in jQuery post fail callback wird für Code 400 keine Antwort angezeigt

Ich habe eine folgende jQuery-Post-Anfrage:

$.post("ajax.php", data).done(
    function(response){
        // do something when response is ok
     }
   ).fail(
    function(response){
          $("#error").html(response);
     }
 );

Wenn in meiner ajax.php-Datei etwas schief geht, gebe ich den HTTP-Antwortcode 400 mit einer Nachricht zurück:

header("HTTP/1.0 400 Error");
echo "Some error message";
exit();

Wenn ich die Antwort auf einen fehlerhaften Anruf in meinem Browser überprüfe, kann ich den Statuscode Status Code:400 Bad Request und einen Antworttext sehen, den ich in einer Fehlermeldung übergeben habe. Der .fail-Callback der jQuery zeigt jedoch meine response nicht an. 

Wie kann ich auf den Fehler/Antworttext zugreifen? 

EDIT

Ich habe meinen Code getestet und der .fail-Callback wird ausgelöst. Ich kann die Antwortnachricht einfach nicht anzeigen.

9
Gacek

Sie müssen jqXHR verwenden:

Das jQuery XMLHttpRequest (jqXHR) -Objekt, das von $ .ajax () ab jQuery 1.5 zurückgegeben wurde, ist eine Obermenge des systemeigenen XMLHttpRequest -Objekts des Browsers. Beispielsweise enthält es die Eigenschaften responseText und responseXML sowie eine Methode getResponseHeader (). Wenn es sich bei dem Transportmechanismus nicht um XMLHttpRequest handelt (z. B. ein Skript-Tag für eine JSONP-Anforderung), simuliert das jqXHR-Objekt nach Möglichkeit die native XHR-Funktionalität.

.fail Ist eine der verfügbaren Promise-Methoden des jqXHR-Objekts.

jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});

Sie können die responseText -Eigenschaft verwenden, um die Fehlermeldung wie folgt abzurufen:

$.post("ajax.php", data).done(
    function(response){
        // do something when response is ok
     }
   ).fail(
    function(jqXHR, textStatus, errorThrown) {
          $("#error").html(jqXHR.responseText);
     }
 );

Referenz: http://api.jquery.com/jquery.ajax/#jqXHR

15
KAD

Ich verwende immer 500 für einen Ajax-Fail-Code, der normalerweise von .fail für mich abgeholt wird. Die JQ-API für .post enthält eine lange Liste verschachtelter Links, in denen beschrieben wird, wie sie mit dem JqXHR-Objekt umgehen und wie es mit JQ als Ganzes interagiert. 

Da Sie nicht .fail mit Ihrem Status auslösen, könnte Ihr Erfolg in der .success- oder .done-Funktion auf Ihren spezifischen Statuscode geprüft werden.

//post stuff
.success(function(response){  
   if(response.status == 400){
      //error stuff
   }
});

Der Vorteil der Durchführung eigener Prüfungen in .done oder .success besteht darin, dass Sie einige Verhaltensweisen für verschiedene Status definieren können, die Sie von Ihrem Server zurückgeben möchten. Es gibt buchstäblich Dutzende verschiedene Arten, mit Ajax-Rückgaben umzugehen und Rückrufverhalten zu definieren.

** Hier ist eine weitere SO Frage, die andere Auflösungen hat.

jQuery AJAX Fehlerbehandlung (HTTP-Statuscodes)

** Die Syntax hier ist etwas anders, da sich diese Frage auf die .ajax-Methode anstatt auf .post konzentrierte. Die vorgeschlagenen Ideen und Auflösungen sollten jedoch trotzdem funktionieren.

0
Erik