从XML加载到Google Maps时Javascript设置超时

从XML加载到Google Maps时Javascript设置超时,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我已经为这段代码挣扎了很长时间。 我正在将XML加载到Google地图中,并从XML中对地址进行地理编码。 当一次查找的地址太多时,我需要给代码添加一个延迟 这是我做这件事的全部代码 我需要延迟从xml文件加载它,因为它是一次加载所有内容,而当xml很大时,地理编码器无法处理那么多请求。XML文件不断变化,因此需要重新加载和重新地理编码。只有当XML文件变得更大时,这才成为一个问题,而这正是我最需要它工作的时候 我把延迟放在geocoder.getLocationsaddress,createM

我已经为这段代码挣扎了很长时间。 我正在将XML加载到Google地图中,并从XML中对地址进行地理编码。 当一次查找的地址太多时,我需要给代码添加一个延迟

这是我做这件事的全部代码

我需要延迟从xml文件加载它,因为它是一次加载所有内容,而当xml很大时,地理编码器无法处理那么多请求。XML文件不断变化,因此需要重新加载和重新地理编码。只有当XML文件变得更大时,这才成为一个问题,而这正是我最需要它工作的时候

我把延迟放在geocoder.getLocationsaddress,createMarker;但是address变量包含所有地址,因此不会延迟它。如果我仅将延迟放在var address=markers[i]周围,则为getAttributeaddress;它不会将i变量传递给函数。任何人能给予的任何帮助都将不胜感激

    // create marker
    function createMarker(response) 
    { 
        var place = response.Placemark[0];
        var point = new GLatLng(place.Point.coordinates[1],
                                    place.Point.coordinates[0]);
        var marker = new GMarker(point);
        GEvent.addListener(marker, "click",function()
            {
                marker.openInfoWindowHtml(place.address);
            });
            map.addOverlay(marker);
    }

      // Create new map object
       var map = new GMap2(document.getElementById("map"));  
       map.addControl(new GSmallMapControl());
       map.addControl(new GMapTypeControl());
       map.enableScrollWheelZoom();
       map.addMapType(G_PHYSICAL_MAP);
       map.setCenter(new GLatLng(49.923068,-119.437981), 10);
       var geocoder = new GClientGeocoder();

     // Download the data in active.xml
    GDownloadUrl("active.xml", function(data) 
    {

        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName('INC');
        setTimeout( function()
            {
    for (var i = 0; i < markers.length; i++)    
        {
        var address = markers[i].getAttribute("address");   
                    geocoder.getLocations(address,createMarker);    
                }
            },200);         
    });
尝试:


这会将您对地理编码器的请求隔开。

这是谷歌地图API v2,而不是v3。
for (var i = 0; i < markers.length; i++) {
  var address = markers[i].getAttribute("address");          
  function (innerAddress, j) {
      setTimeout(function() {
        geocoder.getLocations(innerAddress,createMarker);    
      }, 200 * j);
  }(address, i);
}