2

我正在尝试使用OpenWeatherAPIget使用 JQuery请求执行获取 JSONP 数据。我的查询结构如下:

function getWeather(callback) {
    var weather = 'http://openweathermap.org/data/2.1/find/city?lat=13.3428&lon=-6.2661&cnt=10&jsoncallback=?';
    jQuery.getJSON(weather, callback);
}

// get data:
getWeather(function(data){
    console.log('weather data received');
});

我收到以下错误消息:

语法错误:标签无效

但是,数据正在返回,因为我可以在 Firebug 中单击它,它给了我预期的结果。我在客户端执行这一切,所以我的 JSONP 请求可能有一个基本错误。搜索此主题还表明返回的数据可能是 JSON 格式而不是 JSONP,但我不确定有什么区别。

4

2 回答 2

8

如果您使用的是 jQuery,则可以使用内置的 JSONP 功能为您处理回调。只需使用 $.ajax 代替,如下所示:

function getWeather(callback) {
    var weather = 'http://openweathermap.org/data/2.1/find/city?lat=13.3428&lon=-6.26612&cnt=10';
    $.ajax({
      dataType: "jsonp",
      url: weather,
      success: callback
    });
}

// get data:
getWeather(function (data) {
    console.log('weather data received');
    console.log(data.list[0].weather[0].description);
});

jsfiddle:http: //jsfiddle.net/wCjW3/1/

参考:http ://api.jquery.com/jQuery.ajax/

于 2013-01-28T17:38:39.577 回答
3

看起来api说你应该在url中使用callback而不是作为参数。jsoncallback

在此处的表格中进行了描述

callback - JSONP 回调的函数名。http://en.wikipedia.org/wiki/JSONP

以下代码对我有用:

$.getJSON('http://openweathermap.org/data/2.1/find/city?lat=13.3428&lon=-6.2661&cnt=10&callback=?', function(data) { console.log(data); });
于 2013-01-28T17:21:00.563 回答