0

このコードを取得しました。これは、アラートの場合にのみ機能します (markers.length); はコメント解除されています。

このJavaScriptアラートが表示されない場合、マーカーが表示されません..本当に変です!!

私が持っているボディタグで<body onload="load()" onunload="GUnload()">

以前は 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!!

4

1 に答える 1

0

これは通常、Ajax などでデータをフェッチするときに発生します。基本的に、データを取得するときは、コールバック関数を利用してデータを待つ必要があります。そうしないと、実行するデータがありません。ただし、alert() で実行を一時停止すると、データはバックグラウンドでフェッチされます。

ページで Javascript を実行する前に DOM が読み込まれるのを待つことと考えてください。

含めた関数を呼び出しているコードが含まれていないため、これ以上の回答はできません。

于 2012-04-16T20:04:39.313 に答える