Google Maps集成中的Javascript错误

时间:2010-11-10 09:41:15

标签: javascript google-maps

我正在尝试使用以下代码(看起来非常简单,但它不会像预期的那样工作)

请在这里帮助我:

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”

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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开始(这可能是预期的行为)