Javascript Google maps addListener仅加载一个标记关闭问题

Javascript Google maps addListener仅加载一个标记关闭问题,javascript,google-maps,closures,Javascript,Google Maps,Closures,我试图在移动视口时加载google maps标记,但只有我最后添加的标记正在加载。我认为这是一个结束的问题。这是我代码的一部分: function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng(42.271084, -83.737277), zoom: 16 }); downloadU

我试图在移动视口时加载google maps标记,但只有我最后添加的标记正在加载。我认为这是一个结束的问题。这是我代码的一部分:

function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
      center: new google.maps.LatLng(42.271084, -83.737277),
      zoom: 16
    });
   downloadUrl('/data', function(results) {
      var resultsJSON = JSON.parse(results.responseText).data;
      for (var i = 0; i < resultsJSON.length; i++) {
      var lat = resultsJSON[i].lat;
      var lng = resultsJSON[i].lng;
      var latLng = new google.maps.LatLng(lat, lng);
      var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        category:year,
        icon: icon.style,
        scale: 2
      });

      if(map.getBounds().contains(marker.getPosition())) {
        marker.setMap(map);
      }
      else {
        marker.setMap(null);
      }  
      google.maps.event.addListener(map, "idle", function() {loadMarker(map, marker)});
     }
    });
  }
 function downloadUrl(url, callback) {
    #ajax call
  }
  function loadMarker(map, marker) {
        if(map.getBounds().contains(marker.getPosition())) {
        marker.setMap(map);
        console.log("Hello world");
      }
      else {
        marker.setMap(null);
      } 
  }
函数initMap(){
var map=new google.maps.map(document.getElementById('map'){
中心:新google.maps.LatLng(42.271084,-83.737277),
缩放:16
});
下载URL('/data',函数(结果){
var resultsJSON=JSON.parse(results.responseText).data;
for(var i=0;i
您可以在循环内使用此命令

google.maps.event.addListener(map, "idle", function() {loadMarker(map, marker)});
在循环的每次迭代中,您都会尝试向事件“idle”添加一个匿名函数。在每一个事务中,你都会用新的函数和新的数据重写这个函数。作为最后一个事务的结果,您最后添加的标记正在加载。您应该创建一个标记数组,并在循环结束后传递它们。大概是这样的:

   downloadUrl('/data', function(results) {
      var resultsJSON = JSON.parse(results.responseText).data;
      var markers = [];
      for (var i = 0; i < resultsJSON.length; i++) {
      var lat = resultsJSON[i].lat;
      var lng = resultsJSON[i].lng;
      var latLng = new google.maps.LatLng(lat, lng);
      var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        category:year,
        icon: icon.style,
        scale: 2
      });
       markers[i] = marker;
     }
     loadMarker(map, markers);
     google.maps.event.addListener(map, "idle", function() {loadMarker(map, markers)});
    });

 function loadMarker(map, markers) {
       for (var i = 0; i < markers.length; i++) {
        if(map.getBounds().contains(markers[i].getPosition())) {
        markers[i].setMap(map);
        console.log("Hello world");
      }
      else {
        markers[i].setMap(null);
      } 
     }
  }
downloadUrl('/data',函数(结果){
var resultsJSON=JSON.parse(results.responseText).data;
var标记=[];
for(var i=0;i
您在控制台中遇到错误,还是其他什么?这个代码的结果是什么?它不起作用。您发布的代码会导致同时加载所有标记。我希望标记仅在位于“地图”视口中时加载。