开放天气图API,无法获取JSON,但无法获取JSONP,无法进行异步调用

Open weather map API , couldn't get JSON, but getting JSONP and couldnt make asynchronous call

本文关键字:获取 异步 调用 JSONP 天气图 JSON API      更新时间:2023-09-26

我从google的webservice获取经度和纬度值,并将这些值传递给打开的天气图api以获取温度值。下列代码

function getWeatherData(latitude, longitude) {
                            var temperature = 0;
                            var url = "http://api.openweathermap.org/data/2.5/weather?lat=";
                            url = url + latitude;
                            url = url + "&lon=";
                            url = url + longitude;
                            url = url + "&cnt=1";

                            $
                            .ajax({
                                type : "POST",
                                dataType : "jsonp",
                                url : url + "&callback=?",
                                async : false,
                                success : function(data) {
                                    temperature = data.list[0].main.temp ;
                                    alert (temperature);
                                },
                                error : function(errorData) {
                                    alert("Error while getting weather data :: "+errorData.status);
                                }
                            });
                            return temperature;

对于这个URL

http://api.openweathermap.org/data/2.1/find/city?lat=22.572646&lon=88.36389500000001&cnt=1

我在浏览器中正确地获得以下JSON响应

{
    "message": 0.016,
    "cod": "200",
    "calctime": "",
    "cnt": 1,
    "list": [{
        "id": 1275004,
        "name": "Kolkata",
        "coord": {
            "lon": 88.36972,
            "lat": 22.569719
        },
        "distance": 0.999,
        "main": {
            "temp": 301.15,
            "pressure": 998,
            "humidity": 88,
            "temp_min": 301.15,
            "temp_max": 301.15
        },
        "dt": 1371217800,
        "wind": {
            "speed": 3.1,
            "deg": 150
        },
        "clouds": {
            "all": 40
        },
        "weather": [{
            "id": 721,
            "main": "Haze",
            "description": "haze",
            "icon": "50n"
        }]
    }]
}

但是,当试图使用jQuery的ajax击中相同的,我没有选择,除了得到值作为JSONP, 无法得到它作为JSON

由于我无法获得JSON响应,所以我无法使调用异步。

我需要将异步设置为false。因此,每次都将值温度设置为0,并且我无法从ajax调用

获得实际温度值。

请帮

如果你正在使用JQuery,那么你可以使用defer和promise。像这样:

function getWeatherData(latitude, longitude) {
    var temperature = 0;
    var dfd = $.Deferred();
    var url = "http://api.openweathermap.org/data/2.5/weather?lat=";
    url += latitude;
    url += "&lon=";
    url += longitude;
    url += "&cnt=1";
    $.ajax({
        type: "POST",
        dataType: "jsonp",
        url: url + "&callback=?",
        async: false,
        success: function (data) {
            temperature = data.list[0].main.temp;
            alert(temperature);
            dfd.resolve(temperature);
        },
        error: function (errorData) {
            alert("Error while getting weather data :: " + errorData.status);
        }
    });
    return dfd.promise();
}

这将导致它在通过ajax调用解析温度后返回值。我使用的是天气API,遇到了同样的问题。