我正在尝试使以下代码正常工作(它看起来确实很简单,但是却无法正常工作)
请在这里帮助我:
function findLocationAddress(myLatLng)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
}
}
});
alert(formattedAddress);
return formattedAddress;
}
上面的函数应返回formattedAddress的新值,但仍返回“ MY HOUSE ADDRESS”
任何帮助都非常感谢。
最佳答案
这里的问题是geocoder.geocode请求是异步的,并且您正在同步返回值。尝试这样的事情:
function findLocationAddress(myLatLng)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
alert(formattedAddress);
// then do what you want (e.g. call a function) here
// e.g. doMyNextThing(formattedAddress);
}
}
});
}
上面的代码示例经过测试并可以工作。
如果愿意,您还可以使用回调函数来定义找到地址后发生的情况(这将使该函数更具可重用性)
function findLocationAddress(myLatLng, callback)
{
var formattedAddress='MY HOUSE ADDRESS';
geocoder.geocode({'latLng': myLatLng},function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
formattedAddress = results[1].formatted_address;
callback(formattedAddress);
}
}
});
}
findLocationAddress(myLatLng, function(formattedAddress){
// Do what you want with the result here
});
这可能很明显,但请注意
results[1]
也会给您第二个结果,因为数组索引从0开始(这可能是预期的行为)关于javascript - Google Maps集成中的Javascript错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4143049/