0

我正在使用 Google Maps API V2(我知道,但我正在编辑当前代码,因此必须使用 V2)。我所有的标记都指向正确的位置,但只有一个问题让我差点拉扯我的头发。

问题是只有一个所有标记都正确显示,但信息窗口只有一个内容。即信息窗口没有被更新。它们弹出正确,但它们都有相同的信息。

我在其他一些论坛上看到过这个问题并尝试了解决方案,但无济于事。

以下是从我的 php 脚本中获取 json 编码的 PHP 字符串然后循环它以在谷歌地图上显示标记的代码。

function showAddress(address) {

var response=$.ajax({
      type: "POST",
      url: "<?php echo WEBROOT; ?>/index/ajaxMaps",
      data: {address : escape(address)},
      cache: false,
      async:false,
      dataType: "json",
      success: function (html) {           

          for(i in html){

              if (geocoder) {
                  geocoder.getLatLng(
                    unescape(html[i].businessAddress),
                    function(point) {
                      if(!point) {

                        //alert(address + " not found");

                      } else {

                        map.setCenter(point, 11);

                          string='<div style="height:100px; background:green; color:white; padding:5px; border-radius:0.5em; width:auto"><strong>Company name : </strong>'+ html[i].businessName;
                          string+='<br/><strong>Adress : </strong>'+ html[i].businessAddress;
                          string+='<br/><strong>Website : </strong>'+'<a style="color:white !important" href="'+html[i].businessWebsite+'" >'+'Visit our website'+'</a></div>';

                        var marker = createMarker(point, string);

                        map.addOverlay(marker);

                        //map.addMapType(G_PHYSICAL_MAP);

                        map.addControl(new GLargeMapControl());

                        // As this is user-generated content, we display it as
                        // text rather than HTML to reduce XSS vulnerabilities.

                        marker.openInfoWindowHtml(string);

                        //$('.map_enlarged').trigger('click');
                      }
                    }
                  );
                }

            }           

      }

    });


 $('.map_enlarged').trigger('click');

}

现在添加标记的功能:

function createMarker(point,html) {

    // Create our "tiny" marker icon
   var blueIcon = new GIcon(G_DEFAULT_ICON);
   blueIcon.image = "<?php echo WEBROOT; ?>images/marker.png";

    // Set up our GMarkerOptions object
    markerOptions = { icon:blueIcon };

    var marker = new GMarker(point,markerOptions);

    GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(html);

  });

  return marker;
}

我知道变量名“字符串”没有被更新。但我不明白为什么。我已将其追溯到循环,但看不出它不应该更新的原因。

请记住,我已经挖掘了足够多的上述代码,如果可以的话,请指出我的代码中的错误。提供其他链接可能没有任何用处,因为我可能已经看过它们。

我将不胜感激。

4

1 回答 1

1

您需要在“i”上使用另一个函数闭包(关闭地理编码器的输入参数)。

这个例子解决了这个问题,但没有解决查询限制问题(你真的不应该对大量地址进行即时地理编码,离线地理编码并存储结果坐标)。

于 2012-06-29T12:51:38.933 回答