Dans le code suivant, tout ce que j'essaie de faire est d'obtenir le code de réponse HTTP à partir d'un appel jQuery.ajax. Ensuite, si le code est 301 (déplacé de façon permanente), affichez l'en-tête de réponse «Emplacement»:
<?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>
Quelqu'un peut-il indiquer où je me trompe? Lorsque je vérifie l'objet 'jqxhr' dans Firebug, je ne trouve pas le code d'état, ni l'en-tête de réponse 'Location'. J'ai placé le point d'arrêt sur la dernière ligne de «complet».
Merci beaucoup.
ajax
jquery-1.5
Mahesh
la source
la source
Réponses:
Je vois le champ d'état sur l'objet jqXhr, voici un violon avec lequel cela fonctionne:
http://jsfiddle.net/magicaj/55HQq/3/
la source
Je suis tombé sur ce vieux fil à la recherche d'une solution similaire moi-même et j'ai trouvé que la réponse acceptée était d'utiliser la
.complete()
méthode dejquery ajax
. Je cite l'avis sur le site jquery ici:Pour connaître la
status code
réponse ajax, on peut utiliser le code suivant:Fonctionne de manière similaire pour
.done()
et.fail()
la source
Il est probablement plus idiomatique jQuery d'utiliser la propriété statusCode de l'objet paramètre passé à la fonction $ .ajax:
Cependant, comme l'a dit Livingston Samuel , il n'est pas possible d'attraper 301 codes d'état en javascript.
la source
Lorsque votre demande XHR renvoie une réponse de redirection (état HTTP 301, 302, 303, 307), le
XMLHttpRequest
suit automatiquement l'URL redirigée et renvoie le code d'état de cette URL .Vous pouvez obtenir les codes d'état non redirigeant (200, 400, 500, etc.) via la
status
propriété de l'objet xhr.Donc , vous ne pouvez pas obtenir l'emplacement redirigée de l' en- tête de réponse d'un
301
,302
,303
ou307
demande.Vous devrez peut-être modifier la logique de votre serveur pour répondre de manière à pouvoir gérer la redirection, plutôt que de laisser le navigateur le faire. Un exemple d'implémentation .
la source
Vous pouvez vérifier le contenu de votre réponse, simplement console.log et vous verrez que la propriété a un code d'état. Si vous ne comprenez pas jsons, veuillez vous référer à la vidéo: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts
Il explique les connaissances de base qui vous permettent de vous sentir plus à l'aise avec javascript.
Vous pouvez le faire avec une version plus courte de la demande ajax, veuillez voir le code ci-dessus:
Exemple de sortie de console:
la source
jqxhr est un objet json:
voir: jQuery ajax
vous feriez donc:
jqxhr.status
pour obtenir le statutla source
NB: Utilisation de jQuery 3.4.1
la source