我正在尝试从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);
});
答案 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);
}
});
工作演示: -