我尝试过不同的变量范围,但似乎都没有?我的回调是获得一个有效的结果,但无论我分配给它的变量的范围,一旦回调结束我会丢失值吗?
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;
}
感谢您的意见。
答案 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);
}
});