2011-11-14 37 views
1

我想使用谷歌地图地理编码将此地址字符串转换为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); 
     } 
     }); 
    } 

回答

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字段。

+0

感谢您的回复。我想要做的是渲染一个谷歌地图,如果状态代码是成功的,否则,我不会渲染地图。有没有办法让一个JavaScript函数/任务块,直到另一个完成?或者也许我需要以不同的方式去做这件事? –

+1

您可以在地理编码回调中调用您的函数,而不是'alert(latlng)'调用您的'render(latlng)'。 – Jiri

+0

3年后,这仍然是有效的答案。谢谢 ! – Kaloyan

相关问题