对Geocoder函数内的全局js变量所做的更改不会在函数外部持续存在

时间:2015-07-24 14:04:14

标签: javascript google-maps-api-3 google-geocoder

我想获得一组地址的纬度和经度。这是我使用的代码。

var marker_array = [];
//Event detail array
var LiveEventDetails= <?php echo json_encode($liveEventsDetails); ?>;

LiveEventDetails.forEach(function(event) {
geocoder.geocode({ 'address': event.venue }, function (results, status) {
   if (status == google.maps.GeocoderStatus.OK)
    {
    marker_array.push([results[0].geometry.location.A,results[0].geometry.location.F]);
    }
    //1st test
    console.log(marker_array);
  });
  // 2nd test  
  console.log(marker_array);
});
//3rd test  
console.log(marker_array);

第一个console.log()给出的输出(marker_array)中包含推送的数据。 但是地理编码器函数marker_array在第二个和第三个console.log()后显示为空;

如何在地理编码器功能之后保持推送的数组而不是空的..

1 个答案:

答案 0 :(得分:1)

我认为您的问题是地理编码器使用的回调函数(包含您的&#34; test 1&#34;)是异步的。这意味着正在正确填充marker_array,当&#34;测试2&#34;时,它只是空的或不完整的。和&#34;测试3&#34;跑。 marker_array的真实值将是&#34; test 1&#34;的最后一个输出。

P.S。地理编码使用量有限(source):

  

Google Maps API提供了一个地理编码器类,用于地理编码和   从用户输入动态反向地理编码。当你第一次加载   API,您将被分配一个初始的地理编码请求配额。   使用此配额后,将会有其他请求   每秒限速。如果你想要地理编码   静态,已知地址,请参阅地理编码Web服务文档。