2013-05-01 20 views
0

我想從openweathermap獲取天氣數據。此網址適用於我放入的座標,當我在瀏覽器欄中輸入網址時,我可以下載JSON。我試圖讓我的網頁能夠正常工作。當我運行這個代碼時,在Firebug中,我可以看到HTTP請求獲得了200個成功代碼,但由於某種原因它沒有打印響應。我沒有正確使用getJSON嗎?

var url = "http://api.openweathermap.org/data/2.5/forecast?lat="+ position.coords.latitude +"&lon=" + position.coords.longitude; 

$.getJSON(url, function(res) { 
console.log(res); 
}); 

回答

4

您正在嘗試讀取讀取JSONP的函數中的跨域JSON。 跨領域的JSON閱讀是不可能的。

嘗試JSONP請求代替;,通過附加一個回調

var url = "http://api.openweathermap.org/data/2.5/forecast?lat=" + 
position.coords.latitude +"&lon=" + position.coords.longitude + "&callback=?" ; 

    $.getJSON(url, function(res) { 
    console.log(res); 
    }); 

JSON響應是這樣的: { 'a':22 }

JSONP響應是這樣的: myFunction({'a':22}),其中myFunction的是該值作爲callback傳遞

jQuery不需要回調函數的名稱,但需要callback在URL中進行了處理,以便它可以將其標識爲JSONP請求。

JSONP

如果URL中包含字符串 「回調=?」 (或類似的,由服務器端API定義的 ),請求將被視爲JSONP。有關更多詳細信息,請參閱$ .ajax()中有關jsonp數據類型的 討論。

2

追加這個?callback=?的URL,然後再試一次,如:

$.getJSON(url + '?callback=?', function(res) { 
    console.log(res); 
}); 
0

試試這個

function buildQuery() { 
    var str = "http://api.openweathermap.org/data/2.5/forecast?lat=27.175009&lon=78.041849"; 
      return "select * from json where url ='" + str + "' "; 
     } 

     $.ajax({ 
      url: 'http://query.yahooapis.com/v1/public/yql', 
      data: { 
       q: buildQuery(), 
       format: "json" 
      }, 
      dataType: "jsonp", 
      success: function (data) { 
       alert(JSON.stringify(data)); 
      }, 
      error: function (data) { 
       consol.log(data); 
      } 
     }); 

工作演示: -

http://jsfiddle.net/HWuDk/1/