原型/ Ajax.Request中的METHOD问题

时间:2010-09-24 18:52:05

标签: ajax prototypejs

我试图通过Ajax调用yahoo api来查找当前天气:

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 ''
   }
});

我注意到,而不是 GET firebug说 OPTIONS 。它是什么以及如何使用强制原型来使用GET?

我正在尝试重新创建functionality

这是我要访问的完整网址:

<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>

1 个答案:

答案 0 :(得分:3)

我自己尝试调试同一个问题几个小时后得出以下结论。

我认为这是因为新浏览器中的XSS反措施。

您可以在此处找到有关这些新对策的非常详细信息:

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

基本上,网站可以指定浏览器对于允许来自其他域的脚本的“谨慎”程度。如果您的网站或加载外部JavaScript代码的网站包含其中一条“浏览器建议”,则较新的浏览器会通过执行更强大的XSS策略来做出反应。

出于某种原因,在Firefox下,Prototype的Ajax.Request似乎通过尝试执行OPTIONS请求而不是GET或POST做出反应,因此Prototype尚未更新以正确处理这些新的安全条件。

至少那是我案例中的结论。也许这个线索可以帮助您解决问题...