2012-02-11 96 views
2

我試圖用JavaScript獲取雅虎天氣。我原本做了一個代理,但發現笨拙。使用雅虎天氣API與JSON和腳本標記

所以可以從http://weather.yahooapis.com/forecastjson?w=9807得到JSON響應,我知道腳本標記可以避免同域限制,但是我得到一個語法錯誤。

雅虎的JSON響應沒有填充;我有回調工作,但瀏覽器沒有正確解釋JSON。

我見過很多例子,如How to read yahoo weather JSON data with Jquery ajax,但它很奇怪,因爲所有這些給我的跨域錯誤。

任何人都可以幫助我嗎?跨域,雅虎天氣,沒有特殊的服務器或YQL或類似的東西。一些剛開箱即可使用的東西。

+0

哈,我已經讀了最後一句話,希望使用YQL作爲可能性。那麼,感謝upvote並很高興你得到了你想要的答案。 – 2012-02-13 12:17:33

回答

7

如果您期望JSON-P那麼您需要爲查詢添加回調函數名稱。使用jQuery,這總是?。 jQuery將用一個隨機生成的函數名稱替換它:

var query = escape('select item from weather.forecast where location="CAXX0518"'), 
    url = "http://query.yahooapis.com/v1/public/yql?q=" + query + "&format=json&callback=?"; 

$.getJSON(url, function(data) { 
    console.log(data); 
}); 
+0

對我來說說'$'未定義在Chrome ..阿拉'未捕獲的ReferenceError:$沒有定義' – bouncingHippo 2012-11-20 20:41:59

+3

你忘了加載jQuery的: '' – osahyoun 2012-11-23 17:48:39

0

下面是一些代碼

$(document).ready(DocReady); 

function DocReady() 
{ 
    jQuery.support.cors = true; 
    var Result = $.getJSON("http://weather.yahooapis.com/forecastjson?w=9807", "", 
     function (data) 
     { 
      $("body").append("Sunrise: " + data.astronomy.sunrise + "<br />"); 
      $("body").append("SuntSet: " + data.astronomy.sunset + "<br />"); 
     }); 

}  
3

如果你想使用YQL,這是鏈接:

http://query.yahooapis.com/v1/public/yql?q=select%20item%20from%20weather.forecast%20where%20location%3D%223015%22&format=json

當你調用它只是傳遞,當你jQuery的參數。因此,在其他使用STeve的代碼中,您可以簡單地將傳遞給getJSON函數調用的url替換爲yql鏈接,當然也可以替換要用於該位置的郵政編碼。所以,這裏是代碼:

$(document).ready(DocReady); 

function DocReady() 
{ 
    var Result = $.getJSON("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20location%3D%2233015%22&format=json", "", 
    function (data) 
    { 
     $("body").append("Sunrise: " + data.query.results.channel.astronomy.sunrise + "<br />"); 
     $("body").append("SuntSet: " + data.query.results.channel.astronomy.sunset + "<br />"); 
    }); 

} 

這裏是你需要更換,以獲得正確的位置的部分:

輸入這兩項%22的

http://query.yahooapis.com/v1/public/yql?q=select%20 *%20from%20weather.forecast之間郵政編碼%20where%20location%3D%22

%22 &格式= JSON

如果您有任何問題,請告訴我。