2009-07-15 3 views
0

Dans mon application javascript (en utilisant le prototype), j'ai besoin de quelques informations d'un serveur tiers et ce serveur nécessite parfois une interaction web avec l'utilisateur. Code http avec une nouvelle URL dans l'en-tête Location. Ce que je veux, c'est capturer cette nouvelle URL pour l'ouvrir dans une fenêtre séparée, cependant la méthode getHeader ('Location') retourne toujours null. Une idée??? Ceci est une version simplifiée de mon code:obtenir l'en-tête de localisation d'un appel ajax avec le prototype javascript

UPDATE = function(){ 
new Ajax.Request(proxy_url,{ 
    method: 'post', 
    parameters: "p1=1&p2=2", 
    on302: function(response){ 
     OpenURLfromLocation(response); 
    }, 

    onSuccess: function(transport){ 
     alert("OK"); 
    } 

});} 
OpenURLfromLocation = function(response){ 
alert(response.getHeader('Location')); 
} 

Le proxy ajax fonctionne correctement et je peux voir sur Firebug qu'il se comporte correctement jusqu'à ce qu'il tente de récupérer l'emplacement de l'en-tête.

+0

Lorsque vous regardez dans Firebug ou Fiddler, voyez-vous les en-têtes? Est-ce que faire la chaîne tout en minuscules fait la différence? – epascarello

+0

oui, je peux voir les en-têtes dans firebug, j'essaye avec les minuscules et toujours obtenir la valeur nulle! – 4NDR01D3

Répondre

0

Cela fait un moment que j'ai utilisé Prototype, mais sur l'objet XMLHttpRequest réel, le nom de la méthode est getResponseHeader. Cependant, si vous contrôlez la réponse du serveur, pourquoi ne pas simplement renvoyer la nouvelle URL dans le corps de la réponse? Par ailleurs, si vous ajoutez "location" à l'en-tête de réponse renvoyé par le serveur, la convention consiste à précharger tout ce que vous ajoutez aux en-têtes avec un "X-". avez "X-Location"

+0

Merci ... oui .. j'ai difficile à envoyer en tant que paramètre, c'est juste que ça ne me semble pas la bonne façon de le faire. Pour masquer cette méthode, il suffit de masquer cette méthode afin de renvoyer une valeur nulle au lieu de lancer une exception comme le fait la méthode d'origine – 4NDR01D3

+0

L'envoyer dans l'en-tête semble bizarre Les données de réponse appartiennent dans le corps de la réponse, l'en-tête est pour l'information supplémentaire/méta Ainsi, si l'emplacement est les données principales de la réponse, il appartient dans le corps.Si l'emplacement est un ajout à un réponse "normale" qui contient d'autres données dans le corps, alors je suppose que le fait d'être passé comme un en-tête a du sens dans ce scénario –

+0

mhh .. peut-être vous êtes droit t, je vais aller pour cette solution, mais encore drôle que firebug peut extraire cet entête, mais je ne peux pas de prototype = ( – 4NDR01D3

1

La plupart des navigateurs considèrent la requête d'une URL tierce d'ajax (XMLHttpRequest) comme une violation de sécurité. http://www.xml.com/pub/a/2005/11/09/fixing-ajax-xmlhttprequest-considered-harmful.html

Vous devriez probablement demander cela via un proxy ou d'autres moyens (comme curl en php) qui rendent la requête javascript locale.

Je ne sais pas, si cela 100% répond à votre question, mais devrait probablement être considéré dans votre cas ici.

+0

J'ai déjà un proxy qui traite de ce problème et il mappe à la fois le contenu et les en-têtes et le problème persiste. Merci quand même – 4NDR01D3

+0

Pourrait-il être un problème de portée? Essayez l'alerte de OpenURLfromLocation dans la requête Ajax, ou faites en sorte que la fonction s'appelle function OpenURLfromLocation (réponse) { alert (response.getHeader ('Location')); } – txwikinger

+0

Je l'ai fait ... pas de succès = ( – 4NDR01D3