使用$ .getjson从外部源请求JSON。 200成功但它在哪里?

时间:2013-05-01 17:55:41

标签: javascript jquery

我正在尝试从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);
});  

3 个答案:

答案 0 :(得分: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不需要回调函数的名称,但需要在URL中提及callback,以便它可以将其标识为JSONP请求。

  

JSONP

     

如果网址包含字符串“callback =?” (或类似的,由...定义)   在服务器端API),请求被视为JSONP。见   讨论$ .ajax()中的jsonp数据类型以获取更多详细信息。

答案 1 :(得分:2)

将此?callback=?附加到网址,然后重试:

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

答案 2 :(得分: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/