2013-04-25 8 views
12

Da ich Ajax-Optionen Erfolg und Fehler deklariert habe, wo die Antwort 204 ist, geht die Ajax-Methode zu Option Erfolg, die zu einem Fehler führt.Wie behandelt man eine 204 Antwort in jQuery Ajax?

Wie in der Dokumentation können wir verwenden, StatusCode oder Complete Methoden, aber der Nachteil hier ist, müssen alle Statuscode wie 2 ?? Serie, 3 ?? Serie, 4 ?? Serie! Da diese Antwort dynamisch ist und ich bin mir nicht sicher über den HTTP-Statuscode.

Also, was ist der bessere Weg, um HTTP-Statuscode in Jquery Ajax zu behandeln?

Antwort

13

Die jqXHR-Objekte, die von $ .ajax() ab jQuery 1.5 zurückgegeben werden, implementieren die Promise-Schnittstelle. Das dritte Argument in der Done-Funktion ist ein jqXHR-Objekt. Dieses Objekt verfügt über eine Eigenschaft für den http-Statuscode des Ergebnisses.

jqXHR.done (Funktion (Daten, TextStatus, jqXHR) {}); Eine alternative Konstruktion für die Erfolgsrückrufoption, die .done() Methode ersetzt die veraltete Methode jqXHR.success(). Weitere Informationen zur Implementierung finden Sie unter defered.done() für die Implementierungsdetails . link

$.ajax({ 
     url: "http://fiddle.jshell.net/favicon.png", 
     beforeSend: function (xhr) { 
      xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
     } 
    }).done(function (data, textStatus, jqXHR) { 
     console.log(jqXHR.status); //handle your 204 or other status codes here 
    }); 

Fiddle http://jsfiddle.net/puleos/fVa7X/

Sie Angenommen, wollen alle nicht 200-Statuscodes als Fehler behandeln Sie so etwas tun könnte:

var p = $.ajax({ 
      url: "http://fiddle.jshell.net/favicon.png", 
      beforeSend: function (xhr) { 
      xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
      } 
     }); 

p.done(function(data, textStatus, jqXHR) { 
    if(jqXHR.status !== 200) { 
    handleError(jqXHR.status); 
    return; 
    } 
    // Normal processing here 
}); 

p.fail(function(jqXHR, textStatus) { 
    handleError(jqXHR.status); 
}); 
+0

können Sie mir die jqXHR.done Methode mit jedem Beispiel erklären? Wie geht man mit dem Statuscode um? –

+0

Ich stellte eine Geige zur Verfügung, die zeigt, wie Sie den Statuscode testen können. Wie Sie damit umgehen, hängt vom Kontext der Anwendung ab, die Sie erstellen. –

+0

Behandelt die obige Methode done nur die veraltete Methode jqXHR.success()? Für die Fehlerbehandlung muss ich separate Methode erstellen? Bcoz Ich habe versucht, die jsfiddle zu spielen, indem ich die URL ändere und es behandelt keinen Fehlercode! –

4

Die Lösung oben ist ein schöner Lösung aber für jemanden, der bereits "Erfolg" und "Fehler" auf vielen Komponenten definiert, beinhaltet dies eine Menge von Codeänderungen.

Nach einer Lesung auf der Dokumentation, es ist ziemlich einfach zu Statuscode auf Erfolg zu bekommen:

jQuery.ajax({ 
.. 
'success' : function(data,textStatus,jqXHR) { 
    if (jqXHR.status == "204") { 

    } 
}, 
error : function(jqXHR, exception) { 
     // Manage error 
    }, 

http://api.jquery.com/jquery.ajax/ => status

Dann Statuscode zu überprüfen, ein jqXHR.status macht den Trick

Verwandte Themen