延迟阻止地图拖动上的多个ajax调用

时间:2015-12-22 17:16:30

标签: javascript jquery google-maps google-maps-api-3

每次地图缩放或拖动时,我都会进行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秒的延迟以等待进一步的缩放或拖动。

我怎么能在这里实现呢?

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() {
});