1

私は次の機能を持っています:

$(function() {
     var address = $("#address").text();
     var r;

     function encodeAddress() {
       geocoder = new google.maps.Geocoder();
       geocoder.geocode({'address' : address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
           results[0].geometry.location
           r = results[0].geometry.location
           console.log("inside:" + r);
         } else {
           alert("Google Maps had some trouble finding" + address + status);
         }
       });
     }

    encodeAddress()
    console.log("outside:" + r);
});

ストリートビューとGmapで使用するためにジオコーディングされた住所を返そうとしています。Insideは正しい値を返し、Outsideはアンダーファインドを返します。

すべての助けに大いに感謝します、私は他のどこかでこの方法で値を返すことは不可能であると読みましたが、信頼できるStackOverflowコミュニティに確認する必要がありました。

前もって感謝します。

4

1 に答える 1

4

このようにして、Geocodeのコールバック関数内でoutputGeo関数を呼び出すことができます。基本的に、Geocodeコールバックの前にrにアクセスしているため、rはまだ定義されていません。

$(function() {
     var address = $("address").text();
     var r;

     function encodeAddress() {
       geocoder = new google.maps.Geocoder();
       geocoder.geocode({'address' : address}, function(results, status) {
         if (status == google.maps.GeocoderStatus.OK) {
           results[0].geometry.location;
           r = results[0].geometry.location;
           outputGeo(r);
         } else {
           alert("Google Maps had some trouble finding" + address + status);
         }
       });
     }

    encodeAddress();
    function outputGeo(result){
         console.log("outside:" + result);
    }
});

ジオコーディングサービスの仕組みについて説明します。

Google Maps APIは外部サーバーを呼び出す必要があるため、ジオコーディングサービスへのアクセスは非同期です。そのため、リクエストの完了時に実行するコールバックメソッドを渡す必要があります。このコールバックメソッドは結果を処理します。ジオコーダーは複数の結果を返す場合があることに注意してください。

于 2011-04-01T18:09:45.467 に答える