如何检索本地变量(地理位置HTML5和谷歌地图API)

How to retrieve local variable (geolocation HTML5 and Google Maps API)?

本文关键字:HTML5 地理位置 谷歌地图 API 变量 何检索 检索      更新时间:2023-09-26

我遇到了这个问题:我想检索地理位置定义的位置,以便在我的calcRoute函数中使用它作为起点,例如,下面是代码:

function calcRoute(){
   var pos;
    navigator.geolocation.getCurrentPosition
    (
        function(position) 
        {
            pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
        }
    );
    var start = pos;
    alert(start); // pb here : start is undefined, how could I get the pos value ?
    //...
}

谢谢你的帮助!

您定义的函数是一个回调函数,一旦检索到位置就会调用该函数。

失败的原因有两个:

  • 你根本不知道回调函数是否会被调用在calcRoute的其他部分之前(这实际上非常不太可能,因为它是异步的)
  • ,即使它在结束之前被调用calcRoute, pos在不同的作用域,所以你不能改变它这种方式。

您可能会试图诉诸全局变量来解决第二个问题,但您将无法解决第一个问题。为什么不把剩下的代码放在回调函数中呢?

function calcRoute(){
  navigator.geolocation.getCurrentPosition
  (
      function(position) 
      {
          var pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
          var start = pos;
          alert(start);
      }
  );

}

编辑:更详细的答案来解释为什么走这条路

function calcRoute(){
var pos;
navigator.geolocation.getCurrentPosition
(
    function(position) 
    {
        pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
        var start = pos;
        alert(start);
    }
);

//...
}

因为它是回调,所以将在稍后执行。但是你可以把你的代码分开,让它执行。

function calcRoute(){
    navigator.geolocation.getCurrentPosition
    (
        function(position) 
        {
           var pos = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
           furtherCode(pos);
        }
    );
    }
function furtherCode(position){
    var start = pos;
    alert(start); 
    //...
}