2013-04-10 62 views
0

我坚持这样的问题:我想检索根据地理位置,以便使用它在我的calcRoute功能作为起点,例如定义的位置,这里是代码:如何检索本地变量(地理位置HTML5和Google Maps API)?

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 ? 
    //... 
} 

非常感谢您的帮助!

+0

试着添加一个setTimeout,因为匿名函数是由另一个线程执行的,并且你试图在设置之前得到pos值。 – Pouki 2013-04-10 09:14:09

+0

不,请尝试了解异步调用和使用回调是如何工作的。希望结果可能在那时使用setTimeout是相当无稽之谈。 – CBroe 2013-04-10 09:20:46

回答

2

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

它会失败的原因有两个:

  • 你不知道,如果回调函数将被调用,不 的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); 
     } 
); 

}

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

0
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); 
    } 
); 


//... 
} 
0

由于它是将以后执行的回调。但你可以分开你的代码并让它执行。

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); 
    //... 
}