2010-01-18 7 views
39

jQuery AJAX Fehlerfunktion hat die folgenden Parameter:Erste AJAX Antwort Körper zur Verwendung in Fehler-Callback

error(XMLHttpRequest, textStatus, errorThrown) 

Was ist der beste Cross-Browser-Weg, um den Antworttext zu bekommen?

Funktioniert das (zuverlässig in allen Browsern)?

$.ajax({ 
    error: function(http) { 
    alert(http.responseText); 
    } 
}); 
+0

der http.responseText funktioniert auf allen modernen Browsern, und der Fehlerhandler wird für alle 4xx und 5xx HTTP-Statusfehler ausgelöst. Sie können die Fehlerbehandlung variieren, indem Sie den HTTP-Statuscode unter 'http.status' aufrufen. –

Antwort

-4

Es ist eine versteckte Funktion, die die Daten von XHR istance extrahieren:

var responseText = $.httpData(xhr) 

Wenn Sie "json" als zweiter Parameter übergeben wird er die Antwort als JSON-String behandeln.

Beachten Sie, dass Sie möglicherweise eine Fehlermeldung erhalten, weil keine Antwort vorliegt (z. B. ein Netzwerkproblem). Stellen Sie sicher, dass Sie auch diesen Fall abdecken. Außerdem glaube ich (nicht sicher), dass jQuery den Handler error aufruft, wenn der Server einen 4xx oder 5xx Status zurückgibt.

+4

Vielen Dank. Ausgehend von der Quelle sieht es aus wie 'xhr.responseText' funktioniert für normale HTML-Daten –

+23

Es sieht so aus, als ob die Funktion' $ .httpData' mindestens ab jQuery 1.5.2 verschwunden ist. – dowski

+4

-1 für die Verwendung undokumentierter Funktionen. – rightfold

67

Ab jQuery 1.4.1 Sie verwenden sollten:

var json = JSON.parse(xhr.responseText); 

http://api.jquery.com/jQuery.parseJSON/ See.

+3

Nachdem sichergestellt wurde, dass der Inhaltstyp tatsächlich JSON ist. –

+0

Ähem ... Ja. :-) – dowski

+2

Jetzt heißt es: "Seit jQuery 3.0 ist $ .parseJSON veraltet. Um JSON-Zeichenfolgen zu analysieren, verwenden Sie stattdessen die native JSON.parse-Methode." – JHS

17

Für eine jüngere und allgemeine Antwort (seit jquery 1.5), würde ich das jqXHR Objekt verwenden:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    alert(jqXHR.responseText); 
}) 

Alternativ responseJSON verwendet werden, kann die Antwort Körper bereits

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR.responseJSON); 
}) 
0
analysiert zu bekommen

Ein einfaches Anwendungsbeispiel mit jQuery:

var url = '/'; 
$.get(url).then(
    function(response) { 
     $("#result").html(response); 
    }, 
    function(jqXHR) { 
    $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status); 
    } 
); 

Dies sollte den HTML-Code der aktuellen Website-Startseite zurückgeben.

Dann versuchen Sie die Eingabe einer Nonsense-URL, die nicht existiert und den Fehler angezeigt wird. Sie sollten "404 Not Found" vom Webserver erhalten. Testen Sie es: JSFiddle here