Ich verwende jQuery, um eine AJAX-Anfrage zu stellen. Ich möchte verschiedene Aktionen ausführen, unabhängig davon, ob der HTTP-Statuscode ein 400-Fehler oder ein 500-Fehler ist. Wie kann ich das erreichen?
$.ajax({
type: 'POST',
url: '/controller/action',
data: $form.serialize(),
success: function(data){
alert('horray! 200 status code!');
},
error: function(data){
//get the status code
if (code == 400) {
alert('400 status code! user error');
}
if (code == 500) {
alert('500 status code! server error');
}
},
});
Aktualisieren:
@ GeorgeCummins erwähnte, dass es "seltsam" schien, mit dem Antwortkörper zu arbeiten. Dies ist das erste Mal, dass ich versucht habe, so etwas zu tun. Ist mein Ansatz keine Best Practice? Was würden Sie empfehlen? Ich habe hier eine weitere StackOverflow-Frage erstellt: Welchen Antwort- / Statuscode soll ich an eine AJAX-Anfrage senden, wenn ein Benutzer- / Formularüberprüfungsfehler vorliegt?
data
zu der Fehler - Methode übergeben wurde, aber es ist eigentlichjqXHR
,textStatus
underrorThrown
Sie sollten eine Aktionskarte mit der folgenden
statusCode
Einstellung erstellen :$.ajax({ statusCode: { 400: function() { alert('400 status code! user error'); }, 500: function() { alert('500 status code! server error'); } } });
Referenz (Scrollen Sie zu: 'statusCode')
EDIT (als Antwort auf Kommentare)
Wenn Sie basierend auf den im Antworttext zurückgegebenen Daten Maßnahmen ergreifen müssen (was mir seltsam erscheint), müssen Sie
error:
stattdessen verwendenstatusCode:
error:function (xhr, ajaxOptions, thrownError){ switch (xhr.status) { case 404: // Take action, referencing xhr.responseText as needed. } }
quelle
400: function() {
. Entfernen Sie einfach die Warnung () und fügen Sie den erforderlichen Code hinzu.400: function() {
Anfragetext zugreifen ?Eine andere Lösung ist die Verwendung der Funktion response.status. Dadurch erhalten Sie den http-Status, der vom Ajax-Aufruf zurückgegeben wird.
function checkHttpStatus(url) { $.ajax({ type: "GET", data: {}, url: url, error: function(response) { alert(url + " returns a " + response.status); }, success() { alert(url + " Good link"); } }); }
quelle
verwenden
statusCode: { 404: function() { alert('page not found'); } }
- -
$.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, statusCode: { 404: function() { alert('page not found'); }, 400: function() { alert('bad request'); } } });
quelle