2010-04-08 46 views
3

我正在嘗試使用JQuery getJSON函數來構建JSON數據。 其餘的查詢是:使用JQuery getJSON方法

http://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22london%22&format=json&jsoncallback=? 

我使用解析「數據」,以獲得WOEID值犯規腳本似乎以下工作:

$.getJSON("http://query.yahooapis.com/v1/public/yql?"+ 
       "q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22"+ 
       "london"+ 
       "%22&format=json&jsoncallback=?", 
     function(data){ 
    console.log("json: " + data); 
    var datatmp = data; 
      if(data.results[0]){ 
      var data = filterData(data.results.place[0]); 
      } 
     } 
     ); 

任何人都可以說,我在做什麼錯誤? link text

回答

6

您的代碼需要一些調整,這裏是一個更新版本:

$.getJSON("http://query.yahooapis.com/v1/public/yql?"+ 
     "q=select%20woeid%20from%20geo.places%20where%20text%20%3D%20%22"+ 
     "london"+ 
     "%22&format=json&jsoncallback=json", 
     function(data){ 
      if(data.query.results){ 
       $.each(data.query.results.place, function(i, v) { 
        console.log("woeid #" + i + ": " + v["woeid"]); 
       }); 
      } 
     });​ 

results對象是query之下,所以你需要去首先,上面的代碼迭代通過返回的第一個地方的woyid's,並提醒他們......這只是一個起動器,不知道你最終想用woeid做什麼,但希望這會讓你開始。 You can see the above code working here

+0

那麼我該如何與這個答案競爭呢? – Bob 2010-04-08 23:34:07

+0

非常感謝尼克。感謝您對此的幫助。 – van 2010-04-08 23:38:24

+0

嗨,尼克,感謝您的代碼,它的作品完美,除了一些情況下,當只有一個woeid返回.. ?? http://jsfiddle.net/g7N4U/ 非常感謝, – van 2010-05-04 10:07:06

3

在這一行:

 if(data.results[0]){ 
     var data = filterData(data.results.place[0]); 
     } 

您檢查,看看是否存在results[0]但你不使用它。我懷疑你的問題將改變這種固定:

 if(data.results[0]){ 
     var data = filterData(data.results[0].place[0]); 
     } 
+0

感謝您的指點 – van 2010-04-08 23:37:54

2

我有一個問題:即使它不在您的域中,您是否可以訪問該URL(http://query.yahooapis.com/..。)?這不違反「同源原則」嗎?

+2

jQuery使用帶回調函數的JSONP,所以相同的原始策略不是問題。 – salathe 2010-04-08 23:36:41

3

你有兩個關鍵失誤:

  1. 在YQL URL指定回調正確的參數是callback而非jsoncallback
  2. 結果在data.query.results…被發現,而不是data.results…

另外值得注意的是,YQL結果返回的值爲data.query.count,因此您可以看到返回了多少結果。

+0

'jsoncallback'是告訴jQuery你正在處理'jsonp',這部分是正確的。有關詳細信息,請參閱文檔:http://api.jquery.com/jQuery.getJSON/ – 2010-04-08 23:36:55

+0

'jsoncallback'特定於Flickr,如該頁面上的示例所用。 YQL使用'callback'。 – salathe 2010-04-08 23:39:21

+0

糾正我以前的評論,無論如何,jQuery尋找'callback =',json前綴(或任何前綴)是可選的。你可以在這裏看到相關的jQuery源碼:http://github.com/jquery/jquery/blob/master/src/ajax.js#L212正如你在我的回答中看到的(點擊示例鏈接)他的'jsoncallback'工程因爲任何'callback ='在兩端都匹配:) – 2010-04-08 23:46:02