Javascript本地和全局变量在回调函数中丢失范围

时间:2013-09-17 04:05:07

标签: javascript

我尝试过不同的变量范围,但似乎都没有?我的回调是获得一个有效的结果,但无论我分配给它的变量的范围,一旦回调结束我会丢失值吗?

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;
}

感谢您的意见。

3 个答案:

答案 0 :(得分: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);
    }


});

答案 1 :(得分:0)

我认为Ameen有权利。您的元素引用必须不正确。

试试这个:

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

document.getElementById("Address_AddyLat").setAttribute("value",Lat);

答案 2 :(得分: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);
    }
});