我有AJAX在函数中获取时区信息,我希望它返回结果。
我现在明白AJAX是异步的,所以我需要一个回调函数。我已经查看了一些示例,但我无法绕过它...我不确定我的getTimezone()函数中的参数在哪里,如果我将其更改为仅采用回调函数。
任何帮助将不胜感激,这是代码:
ztimezone=getTimezone(lat,lng);
function getTimezone( tlat, tlong) {
url = "https://maps.googleapis.com/maps/api/timezone/json?location="+tlat+","+tlong+"×tamp=1331161200&key=******";
$.ajax({
url: url,
type: "GET",
crossDomain: true,
dataType: 'json',
success: function (data) {
alert(data.timeZoneId);
zdata=((data.rawOffset/60)/60);
},
error: function (xhr, err) {
alert(xhr.responseText);
}
});
return zdata;
}
答案 0 :(得分:1)
function getTimezone(tlat, tlong, callback) { // <----- HERE
var url = "https://maps.googleapis.com/maps/api/timezone/json?location="+tlat+","+tlong+"×tamp=1331161200&key=******";
$.ajax({
url: url,
type: "GET",
crossDomain: true,
dataType: 'json',
success: function(data) {
alert(data.timeZoneId);
var zdata = ((data.rawOffset/60)/60);
callback(zdata); // <----- HERE
},
error: function (xhr, err) {
alert(xhr.responseText);
}
});
// return zdata; // <----- HERE
}
第一行允许您将回调传递给您的函数。
中间的那个用结果调用回调。
最后一个被注释掉了,因为你永远不能从异步函数返回结果 - 你必须使用回调(或者,相当于一个承诺)。
要使用它,您可以这样做:
getTimezone(45, 16, function(zoneData) {
alert(zoneData); // or whatever
});