51

Ich möchte überprüfen, ob eine Seite den Statuscode 401 zurückgibt. Ist das möglich?Wie bekomme ich den HTTP-Statuscode mit jQuery?

Hier ist mein Versuch, aber es gibt nur 0.

$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    complete: function(xhr, statusText){ 
    alert(xhr.status); 
    } 
}); 
+0

Überprüfen Sie den Wert von 'statusText', der zweite Parameter an die Callback-Funktion statt. –

+1

dies warnt "Autorisierung erforderlich". Ich kann damit arbeiten, aber ein Alarm 401 wäre besser;) – horgen

Antwort

17

den Fehler-Callback verwenden.

Zum Beispiel:

jQuery.ajax({'url': '/this_is_not_found', data: {}, error: function(xhr, status) { 
    alert(xhr.status); } 
}); 

alarmieren 404

+0

tatsächlich tat es. Ich bin neu bei jQuery. Aber was ist mit 401 Status? Wie speichere ich den Status in einer Variablen? o_O – horgen

+0

Firebug gibt Folgendes zurück: GET http: //my-ip/test/test.php 401 Autorisierung erforderlich – horgen

+0

Es wird 401 auf die gleiche Weise angezeigt. Was genau willst du mit dem Fehler machen? – baloo

6

Ich glaube, Sie sollten auch die Fehlerfunktion der $.ajax Methode implementieren.

Fehler (XMLHttpRequest, textStatus, errorThrown) Funktion

Eine Funktion, die aufgerufen werden, wenn der Antrag ausfällt. Der Funktion werden drei Argumente übergeben: Das XMLHttpRequest-Objekt, eine Zeichenfolge, die den Typ des aufgetretenen Fehlers und ein optionales Ausnahmeobjekt beschreibt, falls eines aufgetreten ist. Mögliche Werte für das zweite Argument (neben Null) sind "timeout", "error", "notmodified" und "parsererror".

$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    complete: function(xhr, statusText){ 
    alert(xhr.status); 
    } 
    error: function(xhr, statusText, err){ 
    alert("Error:" + xhr.status); 
    } 
}); 
+2

thx, aber vervollständigt nur 0 zurück. Ist es möglich, den 401-Code zu erhalten ? – horgen

+0

Sind Sie sicher, dass complete aufgerufen wird, wenn ein HTTP 401 (Unauthorized) vom Server zurückgegeben wird? Ich habe nicht getestet, aber ich würde erwarten, dass dieser Fehler aufgerufen wird. – GvS

+0

Vollständig Typ: Funktion (jqXHR jqXHR, String textStatus) Eine Funktion, die aufgerufen wird, wenn die Anforderung abgeschlossen ist (nach Erfolgs- und Fehlerrückrufen).Die Funktion erhält zwei Argumente: das jqXHR-Objekt (in jQuery 1.4.x, XMLHTTPRequest) und eine Zeichenfolge, die den Status der Anforderung kategorisiert ("Erfolg", "Nicht geändert", "Fehler", "Zeitüberschreitung", "Abbruch" oder) "Parser Fehler"). Ab jQuery 1.5 kann die vollständige Einstellung ein Array von Funktionen annehmen. Jede Funktion wird der Reihe nach aufgerufen. Dies ist ein Ajax-Ereignis. – pshirishreddy

5
$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    error: function(xhr, statusText, errorThrown){alert(xhr.status);} 
}); 
75

dies ist möglich mit $.ajax() jQuery Methode

$.ajax(serverUrl, { 
    type: OutageViewModel.Id() == 0 ? "POST" : "PUT", 
    data: dataToSave, 
    statusCode: { 
     200: function (response) { 
     alert('1'); 
     AfterSavedAll(); 
     }, 
     201: function (response) { 
     alert('1'); 
     AfterSavedAll(); 
     }, 
     400: function (response) { 
     alert('1'); 
     bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function() { }); 
     }, 
     404: function (response) { 
     alert('1'); 
     bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function() { }); 
     } 
    }, success: function() { 
     alert('1'); 
    }, 
}); 
+1

Ich denke, das funktioniert jetzt nicht, ich habe versucht, irgendwelche Ideen? – Aravind

+0

Es funktioniert gut. Kannst du teilen, was du versuchst? –

+1

er fragte nach dem 401 Statuscode – bleuscyther

53

Das dritte Argument ist das XMLHttpRequest-Objekt, so dass Sie, was Sie wollen tun. mit Statuscode

$.ajax({ 
    url : 'http://example.com', 
    type : 'post', 
    data : 'a=b' 
}).done(function(data, statusText, xhr){ 
    var status = xhr.status;    //200 
    var head = xhr.getAllResponseHeaders(); //Detail header info 
}); 
+0

Es gibt Folgendes zurück: XMLHttpRequest kann http://example.com/ nicht laden. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten Ressource vorhanden. Origin 'http://stackoverflow.com' ist daher nicht erlaubt. – sidney

+0

Sie müssen die CORS-Behandlung aktivieren, um das Problem "Access-Control-Allow-Origin" zu beseitigen. Je nachdem, mit welchem ​​Projekttyp Sie es zu tun haben, können Sie dies möglicherweise nicht einfach beheben, insbesondere wenn sich die API in einer anderen Domäne befindet und keine domänenübergreifenden Anfragen möglich sind. – Annjawn

+0

@Annjawn So behandeln Sie CORS, als würde ich etwas machen Gleicher API-Aufruf mit PHP, es gibt keinen Fehler von CORS, aber wenn ich für den gleichen API-Aufruf Ajax war, gebe ich Fehler von CORS. Bitte lassen Sie mich wissen –

5

fand ich diese Lösung wo man einfach, den Server-Antwortcode überprüfen.

Beispiel:

$.ajax({ 
type : "POST", 
url : "/package/callApi/createUser", 
data : JSON.stringify(data), 
contentType: "application/json; charset=UTF-8", 
success: function (response) { 
    alert("Account created"); 
}, 
statusCode: { 
    403: function() { 
     // Only if your server returns a 403 status code can it come in this block. :-) 
     alert("Username already exist"); 
    } 
}, 
error: function (e) { 
    alert("Server error - " + e); 
} 
}); 
+0

Sie können Statuscode-Block so viele, wie Sie überprüfen möchten. –

+1

Wenn die Antwort nicht erfolgreich ist und der Antwortstatuscode nicht einmal 403 ist, wird der Fehlerblock angezeigt. –