我正在尝试使用Google Map API计算从数据库获取的坐标到给定地址的最短距离。问题不存在,只要找到一个,我就设法向更短的距离发出警报。但是名为“ duration”的div的innerHTML设置为初始值。

我不明白,我知道范围是如何工作的。
我已经编码了几个小时了,也许我看不清了。
    

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();
var shortestDistance= 99999999;
var myOptions = {
  zoom:7,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}
var positions = new Array();
<?php
  while($row = mysqli_fetch_array($result)){
    echo'positions.push(['.$row['latitude'].','.$row['longitude'].']);';
  }
?>

for(var i=0;i<positions.length;i++){
  var originTemp = "";
  originTemp += positions[i][0] + "," + positions[i][1];
  var request = {
    origin: originTemp,
    destination: "1 Ste-Catherine St.",
    durationInTraffic: true,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
   };

  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      var newRoute = response.routes[0].legs[0].duration.value;
      directionsDisplay.setDirections(response);
      if(newRoute<shortestDistance){
        shortestDistance=newRoute;
        alert("New shorter distance: "+shortestDistance);
      }
    }
  });
}
document.getElementById('duration').innerHTML += shortestDistance + " seconds";
</script>

最佳答案

您正在执行ajax调用。它们默认是异步的。

到该调用的响应出现并且您实际上进行“是否更短”比较时,其余JS代码块(包括设置.innerHTML的位)将已经执行,并将距离设置为9999999。

关于javascript - 为什么全局变量似乎不受内部作用域(Javascript)的影响?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20248752/

10-10 10:14