1

UNDEFINED ではなく情報ウィンドウに正しい値を返す関数内に依存データを配置するコードに変更を加えました。

ここで問題が発生します。1 つのマーカーのみが印刷されます。

    var geocoder;
    var map; 

    function load() {
      geocoder = new google.maps.Geocoder();
      map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(57.699322, 11.951093),
        zoom: 6,
        minZoom: 6,
        maxZoom: 18,
        mapTypeId: 'roadmap'
      });
      var infoWindow = new google.maps.InfoWindow;

          // Get the xml data
    downloadUrl("functions.php", function(data) {
    var xml = data.responseXML;
    var markers = xml.documentElement.getElementsByTagName("marker");
    for (var i = 0; i < markers.length; i++) {
        var point = new google.maps.LatLng(markers[i].getAttribute("lat"),markers[i].getAttribute("lng"));

        codeLatLng(point, function(addr){   
           var name = markers[i].getAttribute("name").replace("_"," ");
           var html = '<div class="markTitle">' + name.replace("_"," ") + '</div>'
                    + '<div class="markAddress">'+addr+'</div>'
                    + '<a class="markLink" href="http://www.wikiplace.se/index.php?title='+ name +'">'                      
                    +  'Läs mer om '+ name.replace("_"," ") + ' här...</a>';
           var marker = new google.maps.Marker({
                        map: map,
                        position: point,
                        uid: "id"+i});      
           google.maps.event.addListener(marker, 'click', function() {
                    infoWindow.setContent(html);
                    infoWindow.open(map, marker);});                 
        });   // end codeLatLng 

   }  // end for-loop
});// end downloadURL  
    }

このコードはうまくいくようです。

  function codeLatLng(point, callback) {        
    geocoder.geocode({'latLng': point}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {     
          callback(results[1].formatted_address);
        } else {
          alert("Couldn't find address");
        }
      } else {
        alert('Geocoder failed due to: ' + status);
      }
    });     
  }

XML ファイルのエラーもチェックしましたが、形式は正しいです。誰かがこれに対する解決策を持っていますか?

ありがとう

4

1 に答える 1

1

codeLatLngは非同期であり、使用するaddrまでは未定義のままです。

コールバック内に設定されている値に依存するコードを移動する必要があります。

于 2012-10-04T18:55:57.897 に答える