Google maps 谷歌地图反向地理编码:传递变量
我试图在一个变量(javascript)中存储与纬度、经度相对应的地址。我创建了一个回调函数(在阅读了大量文章之后),代码如下。现在我想将地址存储在一个名为location3的变量中 奇怪的是,对于分配位置3之后的警报,它是未定义的。但如果在300毫秒后观察,则给出了正确的值。我想马上把地址分配到3号位置。欢迎提出任何建议Google maps 谷歌地图反向地理编码:传递变量,google-maps,reverse-geocoding,Google Maps,Reverse Geocoding,我试图在一个变量(javascript)中存储与纬度、经度相对应的地址。我创建了一个回调函数(在阅读了大量文章之后),代码如下。现在我想将地址存储在一个名为location3的变量中 奇怪的是,对于分配位置3之后的警报,它是未定义的。但如果在300毫秒后观察,则给出了正确的值。我想马上把地址分配到3号位置。欢迎提出任何建议 function codeLatLng1(lat,long,callback) { var geocoder = new google.maps.Geocoder()
function codeLatLng1(lat,long,callback) {
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat,long);
if (geocoder) {
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
callback(results[1].formatted_address);
myvariable=results[1].formatted_address;
} else {
alert("No results found");
}
} else {
alert("Geocoder failed due to: " + status);
}
});
}
}
lat1_last=37;long1_last=-100;
codeLatLng1(lat1_last,long1_last,function(locat) {location3=locat;});
alert (location3); // THIS ALERT SHOWS THAT IT IS STILL UNDEFINED
setTimeout(function(){alert (location3);},300); // THIS ALERT GIVES THE RIGHT ADDRESS
这里要理解的是,geocode()的第二个参数是一个回调函数,它不会立即被调用,而是只有在从Google收到结果后才会被调用。同时,函数codeLatLng1()发布请求后,将控制权返回给调用方。在您的程序中,这意味着接下来将出现第一个alert(),然后等待一段时间,在此期间,Google将返回给您,并调用回调函数,依此类推 同样,设置位置3的匿名回调仅在收到结果时执行,而不是在codeLatLng1返回之前 将您的警报放在匿名回调中会更有意义。通常,这就是结果的最终处理 这是异步或事件驱动编程的一个示例
我希望这能说明问题 嗨,埃里克,非常感谢你的建议。是的,警报在回调中运行良好,不需要像您建议的那样延迟。然而,我的目标是在一个信息框中使用变量“Location3”的值(我真的不需要提醒)-如何将反向地理编码地址直接分配给“Location3”,而不需要延迟。再次感谢。您可以在回调中创建信息框。这是一种很好的编程风格。如果您必须更早地创建它,请使其不可见,然后让回调设置标签并使其可见。将始终存在延迟-您正在访问Internet!当您将大部分代码放在回调中时,您会发现这要容易得多。尽管如此,这比它的价值要麻烦得多,但是如果您想等到定义了location3之后,您需要一个循环来检查它是否仍然是未定义的。。。