Im folgenden Code versuche ich nur, den HTTP-Antwortcode von einem jQuery.ajax-Aufruf abzurufen. Wenn der Code dann 301 (permanent verschoben) lautet, zeigen Sie den Antwortheader "Standort" an:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>jQuery 301 Trial</title>
<script src="http://code.jquery.com/jquery-1.5.1.min.js"></script>
<script type="text/javascript">
function get_resp_status(url) {
$.ajax({
url: url,
complete: function (jqxhr, txt_status) {
console.log ("Complete: [ " + txt_status + " ] " + jqxhr);
// if (response code is 301) {
console.log ("Location: " + jqxhr.getResponseHeader("Location"));
// }
}
});
}
</script>
<script type="text/javascript">
$(document).ready(function(){
$('a').mouseenter(
function () {
get_resp_status(this.href);
},
function () {
}
);
});
</script>
</head>
<body>
<a href="http://ow.ly/4etPl">Test 301 redirect</a>
<a href="http://cnn.com/not_found">Test 404 not found</a>
</body>
</html>
Kann jemand darauf hinweisen, wo ich falsch liege? Wenn ich das Objekt 'jqxhr' in Firebug überprüfe, kann ich weder den Statuscode noch den Antwortheader 'Location' finden. Ich habe den Haltepunkt in der letzten Zeile von 'complete' gesetzt.
Vielen Dank.
ajax
jquery-1.5
Mahesh
quelle
quelle
Antworten:
Ich sehe das Statusfeld auf dem jqXhr-Objekt. Hier ist eine Geige damit:
http://jsfiddle.net/magicaj/55HQq/3/
quelle
Kam über diesen alten Thread und suchte selbst nach einer ähnlichen Lösung und fand die akzeptierte Antwort mit der
.complete()
Methode vonjquery ajax
. Ich zitiere den Hinweis auf der jquery-Website hier:Um die
status code
Antwort einer Ajax-Antwort zu erfahren , kann der folgende Code verwendet werden:Funktioniert ähnlich für
.done()
und.fail()
quelle
Es ist wahrscheinlich idiomatischer, jQuery zu verwenden, um die statusCode-Eigenschaft des Parameterobjekts zu verwenden, das an die Funktion $ .ajax übergeben wird:
Wie Livingston Samuel sagte, ist es jedoch nicht möglich, 301 Statuscodes in Javascript abzufangen.
quelle
Wenn Ihre XHR-Anforderung eine Umleitungsantwort zurückgibt (HTTP-Status 301, 302, 303, 307),
XMLHttpRequest
folgt die automatisch der umgeleiteten URL und gibt den Statuscode dieser URL zurück .Sie können die nicht umleitenden Statuscodes (200, 400, 500 usw.) über die
status
Eigenschaft des xhr-Objekts abrufen.So können Sie nicht die umgeleiteten Position aus den Antwort - Header eines bekommen
301
,302
,303
oder307
Anfrage.Möglicherweise müssen Sie Ihre Serverlogik ändern, um so zu reagieren, dass Sie mit der Umleitung umgehen können, anstatt den Browser dies tun zu lassen. Eine beispielhafte Implementierung .
quelle
Sie können den Inhalt Ihrer Antwort überprüfen, indem Sie einfach console.log verwenden, und Sie werden sehen, dass die Whitch-Eigenschaft einen Statuscode hat. Wenn Sie jsons nicht verstehen, sehen Sie sich bitte das Video an: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts
Es erklärt sehr grundlegende Kenntnisse, mit denen Sie sich mit Javascript wohler fühlen können.
Sie können dies mit einer kürzeren Version der Ajax-Anfrage tun, siehe Code oben:
Beispiel für eine Konsolenausgabe:
quelle
jqxhr ist ein json-Objekt:
siehe: jQuery ajax
so würden Sie tun:
jqxhr.status
um den Status zu erhaltenquelle
NB: Verwenden von jQuery 3.4.1
quelle