取消之前调用的Google地图地理编码方法

时间:2013-10-11 07:38:41

标签: javascript ajax google-maps callback google-geocoder

我正在使用Javascript和Google Maps地理编码方法(在输入时使用keyup事件)实现自动完成功能,有时我会在实际搜索之前收到上一次搜索。

如果尚未完成,我的目的是取消之前的通话。任何人都可以帮助我吗?

getAddressLatLng : function(text,callback) {
    var geocoder = new google.maps.Geocoder();
     geocoder.geocode({
         address : text,
         region : Utils.getRegion()
     },
     function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
             callback(results);
         }
     });
},

1 个答案:

答案 0 :(得分:2)

您可以创建一个全局请求计数器,并且只有在不增加时才执行您的回调行为。 e.g。

var requests = 0;
...
    getAddressLatLng : function(text,callback) {
        var requestNum;
        requests++;
        requestNum = requests;
        var geocoder = new google.maps.Geocoder();
         geocoder.geocode({
             address : text,
             region : Utils.getRegion()
         },
         function(results, status) {
             if(requestNum != requests) return;
             if (status == google.maps.GeocoderStatus.OK) {
                 callback(results);
             }
         });
    },

我还建议对你的功能进行去抖动/限制,这样你就不会浪费带宽来产生不必要的请求(underscore has convenient functions for doing this)。