J'ai donc cet appel jQuery AJAX, et la réponse vient du serveur sous la forme d'une redirection 302. Je voudrais prendre cette redirection et la charger dans une iframe, mais lorsque j'essaie d'afficher les informations d'en-tête avec une alerte javascript, elle est nulle, même si Firebug la voit correctement.
Voici le code, si cela peut vous aider:
$j.ajax({
type: 'POST',
url:'url.do',
data: formData,
complete: function(resp){
alert(resp.getAllResponseHeaders());
}
});
Je n'ai pas vraiment accès aux éléments côté serveur pour déplacer l'URL vers le corps de la réponse, ce qui, je le sais, serait la solution la plus simple, donc toute aide pour l'analyse de l'en-tête serait fantastique.
post
le serveur d'origine et extraira les données cibles et le front-end JS demandera ce serveur proxy pour les données cibles. Ou, 2) changez le code du serveur pour autoriser CORS.Réponses:
La solution de cballou fonctionnera si vous utilisez une ancienne version de jquery. Dans les versions plus récentes, vous pouvez également essayer:
Selon la documentation, l'objet XMLHttpRequest est disponible à partir de jQuery 1.4.
la source
S'il s'agit d'une requête CORS , vous pouvez voir tous les en-têtes dans les outils de débogage (tels que Chrome-> Inspecter l'élément-> Réseau), mais l'objet xHR ne récupérera l'en-tête (via
xhr.getResponseHeader('Header')
) que si un tel en-tête est un simple en-tête de réponse :Content-Type
Last-modified
Content-Language
Cache-Control
Expires
Pragma
S'il ne figure pas dans cet ensemble, il doit être présent dans l'en - tête Access-Control-Expose-Headers renvoyé par le serveur.
Concernant le cas en question, s'il s'agit d'une requête CORS, on ne pourra récupérer l'en-
Location
tête à travers l'XMLHttpRequest
objet que si, et seulement si, l'en-tête ci-dessous est également présent:Si ce n'est pas une requête CORS, vous
XMLHttpRequest
n'aurez aucun problème à le récupérer.la source
la source
La triste vérité sur AJAX et la redirection 302 est que vous ne pouvez pas obtenir les en-têtes du retour car le navigateur ne les donne jamais au XHR. Lorsqu'un navigateur voit un 302, il applique automatiquement la redirection. Dans ce cas, vous verriez l'en-tête dans firebug parce que le navigateur l'a obtenu, mais vous ne le verriez pas en ajax, car le navigateur ne l'a pas transmis. C'est pourquoi le succès et les gestionnaires d'erreurs ne sont jamais appelés. Seul le gestionnaire complet est appelé.
http://www.checkupdown.com/status/E302.html
Voici quelques articles de stackoverflow sur le sujet. Certains articles décrivent des hacks pour contourner ce problème.
Comment gérer une demande de redirection après un appel jQuery Ajax
Catching 302 TROUVÉ en JavaScript
Redirection HTTP: 301 (permanent) vs 302 (temporaire)
la source
L'objet XMLHttpRequest sous-jacent utilisé par jQuery suivra toujours silencieusement les redirections plutôt que de renvoyer un code d'état 302. Par conséquent, vous ne pouvez pas utiliser la fonctionnalité de requête AJAX de jQuery pour obtenir l'URL renvoyée. Au lieu de cela, vous devez mettre toutes les données dans un formulaire et soumettre le formulaire avec l'
target
attribut défini sur la valeur de l'name
attribut de l'iframe:La
url.do
page du serveur sera chargée dans l'iframe, mais lorsque son statut 302 arrivera, l'iframe sera redirigé vers la destination finale.la source
essaye ça:
la source
MISE À JOUR 2018 POUR JQUERY 3 ET PLUS TARD
Je sais que c'est une vieille question, mais aucune des solutions ci-dessus n'a fonctionné pour moi. Voici la solution qui a fonctionné:
la source
+1 à PleaseStand et voici mon autre hack:
après avoir recherché et constaté que la "requête ajax croisée" ne pouvait pas obtenir les en-têtes de réponse de l'objet XHR, j'ai abandonné. et utilisez plutôt iframe.
la source