每次地图缩放或拖动时,我都会进行ajax调用,如下所示:
function initialize(lat, lng) {
var myLatlng = new google.maps.LatLng(lat,lng);
var mapOptions = {
mapTypeControl: false,
center: myLatlng,
zoom: 15,
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
google.maps.event.addListener(map, 'zoom_changed', function() {
getResults(map.getBounds());
});
google.maps.event.addListener(map, 'dragend', function() {
getResults(map.getBounds());
});
};
function getListings(bounds){
data = {'South_Lat':bounds.getSouthWest().lat(), 'South_Lng':bounds.getSouthWest().lng(), 'North_Lat':bounds.getNorthEast().lat(), 'North_Lng':bounds.getNorthEast().lng()};
$.ajax({
type: "POST",
dataType: 'json',
url: "<?=$results_url;?>",
data: data,
success: function (json) {
// do something
}
});
}
但是,有时用户可能会在正在处理一个呼叫时继续拖动或缩放。一个例子是当用户使用鼠标滚轮时,它会在每个缩放步骤触发zoom_change。
为了防止服务器过载,我想在执行ajax之前添加1或2秒的延迟以等待进一步的缩放或拖动。
我怎么能在这里实现呢?
答案 0 :(得分:1)
使用underscore debounce(或其他库中的等效文件)和空闲事件。
var debouncedLoad = _.debounce(getDataFromServer, 2000/*2 seconds*/);
google.maps.event.addListener(map, 'idle', function() {
debouncedLoad();
});
对于jquery there seems to be a plugin for this
答案 1 :(得分:0)
这是一个报道的错误 http://code.google.com/p/gmaps-api-issues/issues/detail?id=1371
建议使用事件&#34;空闲&#34;。
google.maps.event.addListener(map, 'idle', function() {
});