4

我正在使用 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);
         }
     });
},
4

1 回答 1

2

您可以创建一个全局请求计数器,并且仅在它不增加时才执行您的回调行为。例如

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);
             }
         });
    },

我还建议对您的功能进行去抖动/节流,这样您就不会浪费带宽产生不必要的请求(下划线具有方便的功能)。

于 2013-10-11T07:54:04.500 回答