我从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,遇到了同样的问题。