我一直在开展一个小型的javascript项目,该项目将坐标存储在xml / kml文件中,并将其显示在自定义的Google Maps应用程序中。除了反向地理编码外,我的一切都按照我想要的方式工作。当我在回调函数中运行代码时,我能够显示格式化的地址,但是我找不到存储地址供以后使用的方法(用于动态事件,例如当用户显示完整地址)点击标记。)
有没有办法将地址存储在回调函数中,然后再获取它?每当我尝试时,它都说地址是不确定的。见下文:
var address;
var geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
address = results[1].formatted_address;
alert(address); // this displays correctly
}
else {
alert("No results found");
}
}
else {
alert("Geocoder failed due to: " + status);}
}
);
alert(address); // this displays 'undefined'
答案 0 :(得分:1)
有没有办法将地址存储在回调函数中,然后再获取它?
是的,但问题是你以后不想尝试。你试图立刻得到它。
让我解释一下。正如JavaScript中常见的那样,geocoder.geocode
是异步。这意味着它做了一些工作,并且当工作完成时它调用回调,但这里是catch:它立即返回。这意味着,当您在最后一行alert(address)
时,geocoder.geocode
仍然有效,您的回调尚未调用,而address
尚未设置。
解决方案是在回调中使用address
,或者(出于组织的考虑)定义一个函数,您可以在回调中调用该函数来执行后续工作。