0

google map api v3(javascript)を使用してジオコーダーを実装しています。複数のマーカーを配置しています。マーカーをクリックすると、対応するアドレスが情報ウィンドウに表示されます。しかし、マーカーをクリックすると、最初はアドレスのデフォルト値(コードGeo-Address Unavailable!による)が表示され、2番目のマーカーをクリックすると、前にクリックしたマーカーのアドレスが表示されます。コードを添付しています。

    var addr=" Geo-Address Unavailable!";
    var geocoder = new google.maps.Geocoder();
    for(var i = 0; i < latLngs.length-1; i++){ //latLngs is the array of latlongs
       marker = new google.maps.Marker({
        position: latlng,
        id:markerId,
        icon: image,
        map: map,
        animation : google.maps.Animation.DROP,
             });
     }
     markers[markerId] = marker;
      var infowindow = new google.maps.InfoWindow({
                    content: "loading..."
                });
                google.maps.event.addListener(marker, "click", function () {
                    geocoder.geocode({'latLng': this.getPosition()}, function(results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {
                                addr = results[0].formatted_address;

                            }
                    });

                    infowindow.setContent(addr);
                    infowindow.open(map, this);
                });
4

1 に答える 1

0

ジオコーディングは非同期です。ジオコーダーからのコールバック内で戻り値を使用する必要があります。

何が起こっている:

  1. ジオコーダーにリクエストを送信します。
  2. 応答を表示します
  3. 応答はジオコーダーから返されます
  4. ジオコーダーに別のリクエストを送信します
  5. 最初のリクエストへの応答を表示します
  6. 応答はジオコーダーから2番目の要求に返されます
于 2012-07-18T14:33:13.883 に答える