2010-11-10 35 views
0

我试图让下面的代码工作(这看起来很简单,但它不能正常工作像它应该)的Javascript错误在谷歌地图整合

请帮我在这里:

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新的价值,但它仍然是回到“我的房子地址”

任何帮助非常感谢。

回答

3

这里的问题是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开始(这可能是预期的行为)