0

我正在尝试从 openweathermap 获取天气数据。这个 url 适用于我输入的坐标,当我在浏览器栏中输入 url 时,我可以下载 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

3 回答 3

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 包含字符串“callback=?” (或类似的,由服务器端 API 定义),请求被视为 JSONP。有关详细信息,请参阅 $.ajax() 中对 jsonp 数据类型的讨论。

于 2013-05-01T17:58:28.763 回答
2

将此附加?callback=?到 url,然后再试一次:

$.getJSON(url + '?callback=?', function(res) {
    console.log(res);
});
于 2013-05-01T18:02:01.663 回答
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/

于 2013-05-01T18:02:53.377 回答