我正在尝试使用Google地图地理编码将此地址字符串转换为LatLng对象。我相信因为它是一个异步调用,所以latlng被赋值为null。我可以做些什么来使变量赋值按我想要的方式工作?
var latlng = codeAddress(address)
alert("Lat/lng is: " + latlng);
function codeAddress(address) {
geocoder.geocode( {'address':address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
return results[0].geometry.location;
} else {
alert("Geocode failed due to: " + status);
}
});
}
答案 0 :(得分:3)
由于geocode()
是异步的,正如您所提到的,因此无法同步调用它。因此,var latlng = codeAddress(address);
不可能。您需要在函数本身内使用地理编码的结果。考虑:
var latlng = null;
function codeAddress(address) {
geocoder.geocode( {'address':address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latlng = results[0].geometry.location; // use latlng here ..., e.g.:
alert("Lat/lng is: " + latlng);
} else {
alert("Geocode failed due to: " + status);
}
});
}
调用codeAddress(address)
分配给全局变量latlng
。但是,问题在于您不知道分配何时发生。在上述情况下,只有在出现警告框后才会知道。
一般方法是在回调中处理地理编码的结果,例如使用结果填充HTML字段。