我试图通过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>
答案 0 :(得分:3)
我自己尝试调试同一个问题几个小时后得出以下结论。
我认为这是因为新浏览器中的XSS反措施。
您可以在此处找到有关这些新对策的非常详细信息:
https://developer.mozilla.org/en/http_access_control
基本上,网站可以指定浏览器对于允许来自其他域的脚本的“谨慎”程度。如果您的网站或加载外部JavaScript代码的网站包含其中一条“浏览器建议”,则较新的浏览器会通过执行更强大的XSS策略来做出反应。
出于某种原因,在Firefox下,Prototype的Ajax.Request似乎通过尝试执行OPTIONS请求而不是GET或POST做出反应,因此Prototype尚未更新以正确处理这些新的安全条件。
至少那是我案例中的结论。也许这个线索可以帮助您解决问题...