2010-09-24 4 views
4

J'essaie d'appeler api Yahoo via Ajax pour trouver la météo actuelle:Problème avec METHOD prototype/Ajax.Request

var query = "select * from weather.forecast where location in ('UKXX0085','UKXX0061','CAXX0518','CHXX0049') and u='c'"; 
var url = 'http://query.yahooapis.com/v1/public/yql?q=' + encodeURIComponent(query) +'&rnd=1344223&format=json&callback=jsonp1285353223470'; 

new Ajax.Request(url, { 
    method: 'get', 
    onComplete: function(transport) { 
     alert(transport.Status); // say 'null' 
     alert(transport.responseText); // say '' 
    } 
}); 

Je remarquai qu'au lieu de GET Firebug dit OPTIONS. Qu'est-ce que c'est et comment je peux utiliser le prototype de force pour utiliser GET?

Voici functionality que j'essaie de recréer.

Et voici l'URL complète que je suis en train d'accéder:

<a href="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%20in%20(%27UKXX0085%27%2C%27UKXX0061%27%2C%27CAXX0518%27%2C%27CHXX0049%27)%20and%20u%3D%27c%27&rnd=1344223&format=json&callback=jsonp1285353223470">http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%20in%20(%27UKXX0085%27%2C%27UKXX0061%27%2C%27CAXX0518%27%2C%27CHXX0049%27)%20and%20u%3D%27c%27&rnd=1344223&format=json&callback=jsonp1285353223470</a>

+0

Avez-vous compris pourquoi cela se produit? J'ai exactement les mêmes problèmes - peu importe ce que je mets dans la 'méthode', il ne fait que des demandes 'OPTIONS' pour une raison quelconque ... –

Répondre

3

Après des heures d'essayer de déboguer moi la même question, je suis venu à la conclusion suivante. Je crois que cela se produit en raison des contre-mesures XSS dans les navigateurs plus récents.

Vous pouvez trouver des informations très détaillées sur ces nouvelles contre-mesures ici:

https://developer.mozilla.org/en/http_access_control

Fondamentalement, un site peut spécifier comment « prudent » le navigateur doit être de scripts permettant d'autres domaines. Si votre site, ou un site sur lequel vous chargez du code JavaScript externe, inclut l'un de ces «conseils de navigateur», les nouveaux navigateurs réagiront en appliquant une stratégie XSS plus stricte. Pour une raison quelconque, Ajax.Request de Prototype, sous Firefox, semble réagir en essayant de faire une requête OPTIONS, plutôt que GET ou POST, donc peut-être que Prototype n'a pas été mis à jour pour gérer correctement ces nouvelles conditions de sécurité.

Au moins, c'était la conclusion dans mon cas. Peut-être que cet indice peut aider avec votre cas ...

+0

Merci pour la suggestion. J'espère que cela sera utile pour les autres utilisateurs. Je me retrouve avec iframe – st78

+0

Merci. J'ai eu le même problème. –

+0

Même ici. S'il s'agit d'un problème de prototype, il n'a pas été corrigé dans la version 1.7. –

Questions connexes