156 votes

jQuery et en-tête de réponse AJAX

J'ai donc eu cette jQuery AJAX appel, et la réponse vient du serveur sous la forme d'une redirection 302. Je voudrais profiter de cette redirection et de le charger dans un iframe, mais lorsque j'essaie d'afficher l'en-tête info avec une alerte javascript, elle vient de nulle, même si firebug voit correctement.

Voici le code, si ça vous aidera:

$j.ajax({
    type: 'POST',
    url:'url.do',
    data: formData,
    complete: function(resp){
        alert(resp.getAllResponseHeaders());
    }
});

Je n'ai pas vraiment accès au serveur-côté des trucs pour aller de l'URL pour le corps de la réponse, dont je sais qu'elle serait la solution la plus facile, de sorte que toute aide à l'analyse de l'en-tête serait fantastique. Je vous remercie pour votre temps.

172voto

rovsen Points 1670

solution de cballou devrait fonctionner. peut-être que vous utilisez une ancienne version de jquery. vous pouvez aussi essayer ceci :

Selon les docs l’objet XMLHttpRequest est disponible à partir de jQuery 1.4.

132voto

acdcjunior Points 19898

Si c'est un SCRO demande, vous pouvez voir tous les en-têtes des outils de débogage (tels que google Chrome->Inspecter l'Élément->network (Réseau), mais l'objet xHR ne récupérer l'en-tête (via xhr.getResponseHeader('Header')) 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

Si elle n'est pas dans cet ensemble, il doit être présent dans le Contrôle d'Accès-Exposer-en-tête en-tête retournée par le serveur.

Au sujet de l'affaire en question, si c'est un SCRO demande, il ne sera en mesure de récupérer l' Location - tête throgh l' XMLHttpRequest objet si, et seulement si, l'en-tête ci-dessous est également présent:

Access-Control-Expose-Headers: Location

Si ce n'est pas un SCRO demande, XMLHttpRequest n'auront aucun problème à le retrouver.

33voto

keithics Points 1155
 var geturl;
  geturl = $.ajax({
    type: "GET",
    url: 'http://....',
    success: function () {
      alert("done!"+ geturl.getAllResponseHeaders());
    }
  });

18voto

DRaehal Points 443

La malheureuse vérité sur l'AJAX et la redirection 302, c'est que vous ne pouvez pas obtenir les en-têtes du retour, car le navigateur ne donne jamais à la XHR. Lorsqu'un navigateur voit un 302 il s'applique automatiquement la redirection. Dans ce cas, vous verriez la tête dans firebug, car le navigateur a obtenu, mais vous ne serait pas la voir en ajax, parce que le navigateur n'a pas le passer. C'est pourquoi la réussite et les gestionnaires d'erreur jamais appelée. Seul le complet gestionnaire est appelé.

http://www.checkupdown.com/status/E302.html

The 302 response from the Web server should always include an alternative URL to which redirection should occur. If it does, a Web browser will immediately retry the alternative URL. So you never actually see a 302 error in a Web browser

Voici quelques stackoverflow posts sur le sujet. Certains des postes décrire des hacks pour obtenir autour de cette question.

Comment gérer une demande de redirection après un appel Ajax jQuery

Attraper 302 TROUVÉ en JavaScript

redirection http: 301 vs 302 (temporaire vs permanente)

10voto

PleaseStand Points 16718

Le sous-jacent objet XMLHttpRequest est utilisé par jQuery sera toujours silencieusement suivre les redirections plutôt que de retourner un code d'état 302. Par conséquent, vous ne pouvez pas utiliser jQuery AJAX la fonctionnalité de demande pour obtenir le retour de l'URL. Au lieu de cela, vous avez besoin de 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 la balise iframe:

$('#myIframe').attr('name', 'myIframe');

var form = $('<form method="POST" action="url.do"></form>').attr('target', 'myIframe');
$('<input type="hidden" />').attr({name: 'search', value: 'test'}).appendTo(form);

form.appendTo(document.body);
form.submit();

Le serveur de l' url.do page sera chargée dans l'iframe, mais lorsque son état 302 arrive, l'iframe sera redirigé vers la destination finale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X