1

我只是想从 HTML5 的 geolocation.getCurrentPosition 函数中获取变量。但是,让我的变量在函数之外定义时遇到了很多困难。

该函数使用以下代码工作:

<script>
var latitude;
var longitude;
var accuracy;
var altitude;
var altitudeAccuracy;
var heading;
var speed;

if (navigator.geolocation){
  navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
    }
  );
}

// alert(latitude);

在这里,我看到alert(longitude)返回一个数值。但是,当我注释掉该行并取消注释时alert(latitude),我会收到“未定义”警报。

任何帮助将不胜感激!谢谢。

4

2 回答 2

4

因为getCurrentPosition是异步调用。

您需要等待回调触发,然后才能访问它检索的值。

function nextStep(){
    alert(latitude);
}

navigator.geolocation.getCurrentPosition(  
    function (position) {
      latitude = position.coords.latitude;
      longitude = position.coords.longitude;
      alert(longitude)
      accuracy = position.coords.accuracy;
      altitudeAccuracy = position.coords.altitudeAccuracy;
      heading = position.coords.heading;
      speed = position.coords.speed;
      nextStep();
    }
);
于 2013-01-07T16:17:31.310 回答
1

getCurrentPosition 是一个异步调用

在 javascript 中,并发使用“运行到完成”模型。这意味着当前函数中的所有代码都将在它移动到下一个执行上下文之前完成。在您的原始代码中,代码将按以下顺序执行:

  • 变量定义
  • getCurrentPosition 已初始化
  • 警报(纬度)
  • 脚本完成

然后它将进入下一个执行上下文并运行您的回调函数,此时将设置变量并运行另一个警报。如果要确保首先设置变量,则需要在回调中运行警报

于 2013-01-07T16:25:54.583 回答