0

さまざまな変数スコープを試しましたが、どれもうまくいきませんか? コールバックは有効な結果を取得していますが、割り当てた変数のスコープに関係なく、コールバックが終了すると値が失われますか??

var geocoder;
var Lat;
var Long;

function codeAddress()
{


    var geocoder = new google.maps.Geocoder();

    var addy1......

    geocoder.geocode({ 'address': fullAddress }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK)
        {
            Lat = results[0].geometry.location.lat();
            Long = results[0].geometry.location.lng();

        }
        else
        {
            alert("Geocode was not successful for the following reason: " + status);
        }


    });
    alert(Lat);
    document.getElementById("Address_AddyLat").type.value = Lat;
    document.getElementById("Address_AddyLong").value = Long;
}

ご意見ありがとうございます。

4

3 に答える 3

1

geocodeは非同期関数なので、呼び出すとすぐに戻り、値Latが設定される前に次の行が実行されます。次のように考えてください。

geocoder.geocode({ 'address': fullAddress }, /*...*/); // 1
alert(Lat); // 2
document.getElementById("Address_AddyLat").type.value = Lat; // 3
document.getElementById("Address_AddyLong").value = Long; // 4

やりたいことは、実際にLatコールバック自体の値を読み取ることです。

geocoder.geocode({ 'address': fullAddress }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK)
    {
        Lat = results[0].geometry.location.lat();
        Long = results[0].geometry.location.lng();

        alert(Lat);
        document.getElementById("Address_AddyLat").type.value = Lat;
        document.getElementById("Address_AddyLong").value = Long;
    }
    else
    {
        alert("Geocode was not successful for the following reason: " + status);
    }


});
于 2013-09-17T04:11:28.003 に答える
0

アミーンが言ったように、ジオコードは非同期プロセスであるため、アラートと表示コードをコールバック関数に入れる必要があります。もう1つの間違いは、メソッドとして lat() & lng() を使用していることです。これはメソッドではなく、直接使用する必要があるプロパティです。あなたのコードは次のようになります。

geocoder.geocode({ 'address': fullAddress }, function (results, status) {
    if (status == google.maps.GeocoderStatus.OK)
    {
        Lat = results[0].geometry.location.lat;
        Long = results[0].geometry.location.lng;

        alert(Lat);
        document.getElementById("Address_AddyLat").value = Lat;
        document.getElementById("Address_AddyLong").value = Long;
    }
    else
    {
        alert("Geocode was not successful for the following reason: " + status);
    }
});
于 2013-09-17T06:25:25.420 に答える