Javascript infowindow.setContent同样的事情…处理闭包/谷歌地图api

Javascript infowindow.setContent同样的事情…处理闭包/谷歌地图api,javascript,google-maps-api-3,closures,infowindow,Javascript,Google Maps Api 3,Closures,Infowindow,我一直在努力解决这个infowindow.setContent(地址)持续数小时。根据我在这里读到的内容,我知道它与闭包有关,但我无法让它工作。我的两个信息窗口现在都相同 这是现在的测试站点,很抱歉外观不好:) PHP&js代码: <script type="text/javascript"> var o = <?php echo json_encode($m_userArray); ?> </script> <script src="http://m

我一直在努力解决这个
infowindow.setContent(地址)持续数小时。根据我在这里读到的内容,我知道它与闭包有关,但我无法让它工作。我的两个信息窗口现在都相同

这是现在的测试站点,很抱歉外观不好:)

PHP&js代码:

<script type="text/javascript">
var o = <?php echo json_encode($m_userArray); ?>
</script>
<script src="http://maps.google.com/maps/api/js?sensor=false" 
          type="text/javascript"></script>

<div id="map" style="width: 500px; height: 400px;"></div>
<script type="text/javascript">
    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 10,
      center: new google.maps.LatLng(-33.92, 151.25),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });

    var marker;
    var i;
    var geocoder = new google.maps.Geocoder();
    var infowindow = new google.maps.InfoWindow();
    for(var i = 3; i <= 4; i++) {


        var address = window.o[i].address;

        geocoder.geocode( { 'address': address}, function(results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
            map.setCenter(results[0].geometry.location);
                marker = new google.maps.Marker({
                map: map,
                position: results[0].geometry.location
            });

            google.maps.event.addListener(marker, 'click', (function(marker, i) {

            return function() {
              infowindow.setContent(address);
              infowindow.open(map, marker);
            }
          })(marker, i));
          } else {
            alert("Geocode was not successful for the following reason: " + status);
          }
        });
    }
</script>

变量o=
var map=new google.maps.map(document.getElementById('map'){
缩放:10,
中心:新谷歌地图LatLng(-33.92151.25),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var标记;
var i;
var geocoder=new google.maps.geocoder();
var infowindow=new google.maps.infowindow();

对于(var i=3;i可能重复的可能重复的问题是,addListener内部将传递相同的地址。您可以做的是1)既然传递了i,就用window.o[i].address替换地址,或者2)代替i,将地址作为带标记的参数传递。这确实是一个重复的职位。但我记得我在这个问题上的艰难时期,所以我很感伤:P@alkis geocodezip最终给出了最好的答案。我一直在尝试你的一些方法,我想可能是别的方法。我仍然需要更好地理解这一点,才能确切地知道出了什么问题。@geocodezip我能够通过你的回答解决我的问题,我将提交我得到的进展。