奇怪的Google Maps V2 Marker问题

时间:2012-04-16 11:45:50

标签: google-maps

获得此代码,仅在alert(markers.length)时有效;没有注释。

当这个javascript警报未显示时,我没有得到任何标记..真的很奇怪!!

在body标签中我有<body onload="load()" onunload="GUnload()">

Previoslly调用load()函数和其他函数:

         function showAddress(address) {
           if (geocoder) {//+', '+init_street
    geocoder.getLatLng(address,
        function(point) {
                if (!point) {
                  document.getElementById("place").value="not found";
                  //alert(address + " not found");
                } else {
                //  document.getElementById("place").value=point.y.toFixed(4) + "," + point.x.toFixed(4);
                    map.setCenter(point, 16);
                    marker.setPoint(point);
                    //marker.openInfoWindowHtml(address);
                }
            }
    );
}
           }

         //from a point returns and address!
      function showPointAddress(response) {
  if (!response || response.Status.code != 200) {//not found
    //alert("Status Code:" + response.Status.code);
      document.getElementById("place").value="not found";
  } 
  else {//found
        map.setCenter(marker.getPoint(), 16);
        place = response.Placemark[0];
        document.getElementById("place").value=place.address;
        //document.getElementById("place").value=marker.getPoint().toUrlValue();
  }
         }


            // Creates a marker at the given point with the given number icon and text
          function createMarker(p,text) {
var marker = new GMarker(p);
if (text!=""){
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(text);});
      }
return marker;
      }


          ` var geocoder = null;`
          ` var map = null;`


      function load() {//loading the map
  if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.enableScrollWheelZoom();
        geocoder = new GClientGeocoder();

        if (init_street!=""){
            geocoder.getLatLng(init_street,function(point) {//set center point in map
                if (point){
                    map.setCenter(point, zoom);
                    map.addOverlay(createMarker(point,init_street));
                    map.openInfoWindow(point,init_street);
                }
            });
        }

        map.addControl(new GLargeMapControl());
        map.setMapType(G_NORMAL_MAP);           
  }
}`




function(data, responseCode) {
  if(responseCode == 200) {
        var texts = [];
        var addresses = [];       
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("item");
        alert (markers.length);
        for (var i = 0; i < markers.length; i++) {  
            var address=markers[i].getElementsByTagName('address').item(0).childNodes.item(0).nodeValue;
            if (address!=null){
                //alert (address);
                var title=markers[i].getElementsByTagName('title').item(0).childNodes.item(0).nodeValue;
                var link=markers[i].getElementsByTagName('link').item(0).childNodes.item(0).nodeValue;
                var desc=markers[i].getElementsByTagName('description').item(0).childNodes.item(0).nodeValue;
                desc=desc.substr(0,220);//limit
                addresses.push(address);
                texts.push("<div style='width: 200px'><a target='_blank' href='" +link+"'>"+title+"</a><br />"+desc+"</div>");
            }//if
         }//for

        for (var i = 0; i < addresses.length; i++) { 
            geocoder.getLatLng(addresses[i], function (current) { 
                return function(point) { 
                    if (point) map.addOverlay(createMarker(point,texts[current]));    
                } 
            }(i)); 
        }

  }//if });

我理解需要回调函数来加载标记的问题,但我输了..

有任何帮助! ;)

Thx in advanced !!

1 个答案:

答案 0 :(得分:0)

这通常在使用Ajax或类似方法获取数据时发生。基本上,当您获取数据时,您需要利用回调函数来等待数据。如果不这样做,则无法执行任何数据。但是,如果您使用alert()暂停执行,则数据将在后台获取。

将其视为在页面上执行Javascript之前等待DOM加载。

我没有给你一个更好的答案,因为你没有包含调用你所包含的功能的代码。