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

我认为阿明有权这样做。您的元素引用一定不正确。

尝试这个:

document.getElementById("Address_AddyLat").value = Lat;

或者

document.getElementById("Address_AddyLat").setAttribute("value",Lat);
于 2013-09-17T04:56:08.000 回答
0

正如 Ameen 所说,地理编码是一个异步过程,因此您需要将警报和显示代码放在回调函数中。你的另一个错误是你使用 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 回答