Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Geocoder函数内部对全局js变量所做的更改不会在函数外部持久存在_Javascript_Google Maps Api 3_Google Geocoder - Fatal编程技术网

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

Javascript 在Geocoder函数内部对全局js变量所做的更改不会在函数外部持久存在,javascript,google-maps-api-3,google-geocoder,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

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

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);
var标记_数组=[];
//事件详细信息数组
var LiveEventDetails=;
LiveEventDetails.forEach(函数(事件){
geocoder.geocode({'address':event.venture},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK)
{
marker_array.push([results[0].geometry.location.A,results[0].geometry.location.F]);
}
//第一次测试
console.log(marker_数组);
});
//第二次试验
console.log(marker_数组);
});
//第三次试验
console.log(marker_数组);
第一个console.log()给出的输出(marker_数组)中包含推送的数据。。 但是在geocoder函数之后,第二个和第三个console.log()将marker_数组显示为空


如何在geocoder函数之后保留已推送的数组而不为空。

我认为您的问题在于geocoder使用的回调函数(包含您的“测试1”)是异步的。这意味着正在正确填充
标记_数组
,当“测试2”和“测试3”运行时,它只是空的或不完整的。
marker_array
的真实值将是“测试1”的最后一次输出

另外,地理编码的使用量是有限制的():

GoogleMapsAPI为地理编码和 从用户输入动态反向地理编码。当您第一次加载 API,您将获得地理编码请求的初始配额。 一旦您使用了此配额,将收到其他请求 速率限制为每秒。如果您希望进行地理编码 静态已知地址,请参阅地理编码web服务文档


可能的重复不会发生在其他函数中..只发生在Geocoder函数中哪些其他函数?它们像地理编码器一样是异步的吗?不,在同步函数中..你能给我一个解决方案吗?