如何构建我的AJAX以接受回调函数

时间:2014-11-13 01:06:09

标签: javascript jquery ajax

我有AJAX在函数中获取时区信息,我希望它返回结果。

我现在明白AJAX是异步的,所以我需要一个回调函数。我已经查看了一些示例,但我无法绕过它...我不确定我的getTimezone()函数中的参数在哪里,如果我将其更改为仅采用回调函数。

任何帮助将不胜感激,这是代码:

ztimezone=getTimezone(lat,lng);


function getTimezone( tlat,  tlong) {
                 url = "https://maps.googleapis.com/maps/api/timezone/json?location="+tlat+","+tlong+"&timestamp=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;                
}

1 个答案:

答案 0 :(得分:1)

function getTimezone(tlat,  tlong, callback) { // <----- HERE
    var url = "https://maps.googleapis.com/maps/api/timezone/json?location="+tlat+","+tlong+"&timestamp=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
});