2010-09-24 34 views
4

我試圖通過Ajax調用API雅虎找到當前天氣:問題與原型法/ 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 '' 
    } 
}); 

我注意到,認爲與其GET螢火說選項。它是什麼以及如何使用強制原型來使用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

你知道爲什麼會發生這種情況嗎?我遇到了完全相同的問題 - 無論我在「方法」中輸入什麼內容,它只會因爲某種原因而「請求」請求... – 2010-12-11 21:27:34

回答

3

後的嘗試調試同一問題我自己個小時,我來到了以下結論。

我相信這是因爲新瀏覽器中的XSS對策。

您可以在這裏進一步瞭解這些新的反制措施非常詳細的信息:

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

基本上,一個網站可以指定「小心」的瀏覽器應該如何關於允許從其他域腳本。如果您的網站或您要加載外部JavaScript代碼的網站包含這些「瀏覽器建議」中的一條,那麼較新的瀏覽器將通過執行更強大的XSS策略來作出反應。

出於某種原因,Prototype的Firefox下的Ajax.Request似乎通過嘗試執行OPTIONS請求而不是GET或POST來做出反應,因此Prototype尚未更新以正確處理這些新的安全條件。

至少這是我的結論。也許這個線索可以幫助你的情況...

+0

感謝您的建議。我希望這會對其他用戶有用。我最終與iframe – st78 2010-12-11 22:04:55

+0

謝謝。我有同樣的問題。 – 2010-12-21 21:01:08

+0

同樣在這裏。如果這是一個原型問題,它在v1.7中沒有被修復。 – 2011-07-04 11:04:05