开放天气图API,无法获取JSON,但无法获取JSONP,无法进行异步调用
Open weather map API , couldn't get JSON, but getting JSONP and couldnt make asynchronous call
我从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,遇到了同样的问题。
相关文章:
- 如何从SeleniumWebdriver获取异步Javascript响应
- 异步获取数据使用JavaScript同步获取数据
- 无法使用开放天气图 API 异步获取天气
- 从异步回调中获取值
- 如何处理异步获取的数据
- 在我的案例中,如何获取异步数据
- 从 Ajax 获取由 ZombieJS 的异步点击事件触发的 Http 错误
- 在呈现“页面”之前异步获取数据
- 如何通过连接多个异步javascript调用,从对象数组中排序并获取第一个obejct
- 在Ember.js中异步从DB获取
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- 异步编程-如何在对象数组中循环,并使用从api获取的数据更改每个对象的属性
- NodeJS异步模块:如何在回调中获取results对象
- 从 Android 中的 url 获取异步加载的 html(通过 ajax)
- JavascriptKango:如何在非异步函数中获取异步JS函数的返回
- 获取异步父函数的参数
- 如何获取异步JSONP请求的值
- 如何在流星函数中获取异步数据
- 美元AngularJS http.获取异步执行顺序
- 使用Jquery获取异步加载svg元素的id