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