Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在谷歌地图中使用JSON-闭包?_Javascript - Fatal编程技术网

Javascript 在谷歌地图中使用JSON-闭包?

Javascript 在谷歌地图中使用JSON-闭包?,javascript,Javascript,我正在从web服务检索结果。结果以JSON的形式返回。JSON如下所示: { "001": { name: 'Grocery Store', latitude:30.2669456, longitude:-97.7427782, calendar: { month: 'November' } }, "002": { name: 'Ice Cream', latitude:30.2669425, longit

我正在从web服务检索结果。结果以JSON的形式返回。JSON如下所示:

{
  "001": {
    name: 'Grocery Store',
    latitude:30.2669456,
    longitude:-97.7427782,
    calendar: {
      month: 'November'
    }
  },

  "002": {
    name: 'Ice Cream',
    latitude:30.2669425,
    longitude:-97.7427742,
    calendar: {
      month: 'November'
    }
  }
}
在检索到这些数据后,我试图将其添加到谷歌地图中。我已成功初始化我的地图。事实上,推杆出现在正确的位置。当我将鼠标悬停在每个图钉上时,标题将正确显示。但是,当我单击图钉时,信息窗口出现,它显示在每个图钉的相同位置。此外,信息窗口的内容是相同的。我注意到,它总是与
json
中的最后一个键关联的值。因此,我怀疑这与闭包有关。同时,我不知道如何解决这个问题

我做错了什么?下面是我的代码,它在结果中循环:

function dataRetrieved(json) {
  for (var place in json) {                 
    var marker = new google.maps.Marker({
      map: map,
      title: json[place].name,
      position: {
        lat: json[place].latitude,
        lng: json[place].longitude
      }
    });

    marker.info = new google.maps.InfoWindow({
      content: '<div>' + json[place].calendar.month + '</div>'
    });

    google.maps.event.addListener(marker, 'click', function() {
      marker.info.open(map, marker);
    });                     
  }                     
}
函数数据检索(json){
对于(json中的变量位置){
var marker=new google.maps.marker({
地图:地图,
标题:json[place]。名称,
职位:{
lat:json[place]。纬度,
lng:json[place]。经度
}
});
marker.info=new google.maps.InfoWindow({
内容:''+json[place].calendar.month+''
});
google.maps.event.addListener(标记'click',函数(){
标记信息打开(地图,标记);
});                     
}                     
}

谢谢你的帮助

是的,这正是您所期望的-当您单击任何链接时,事件处理程序中使用的变量
marker
就是循环中的最后一项

把它修好

(function(m){
     google.maps.event.addListener(m, 'click', function() {
      m.info.open(map, m);
    });
})(marker);
是的,它是: