var currentLatitude = 0;

   var getLocation = function() {

   var suc = function(p) {
      alert("geolocation success");
      if (p.coords.latitude != undefined) {
        currentLatitude = p.coords.latitude;
        currentLongitude = p.coords.longitude;
      }
   };

   var fail = function() {
      alert("geolocation failed");
      getLocation();
   };

   intel.xdk.geolocation.getCurrentPosition(suc,fail);
}

 getLocation();
 alert(currentLatitude); //this is giving me zero


currentLatitude即将变为0,因为它们已定义为global。价值不变。但是当我做console.log(p.coords.latitude)时,它给了我价值。

我尝试了很多事情,但似乎没有任何效果。我很确定我的逻辑是错误的。

最佳答案

您的问题来自getCurrentPosition()的异步执行。调用它时,您正在计划访问GPS的请求(或任何其他GeoLocation功能,可能包括很多东西,其中包括基于IP地址的最佳猜测),该结果将在将来由您的浏览器决定。一旦这个事件被触发(并且它是完全可选的,它可能永远不会触发),那么您的suc()fail()将被调用。如果您编写了调用此getLocation()的代码,则如下所示:

var currentLatitude, currentLongitude;

var getLocation = function () {
    var suc = function (p) {
        alert("geolocation success:"+p.coords.latitude);
        if (p.coords.latitude != undefined) {
            currentLatitude = p.coords.latitude;
            currentLongitude = p.coords.longitude;
        }

    };
    var fail = function () {
        alert("geolocation failed");
        getLocation();
    };

    navigator.geolocation.getCurrentPosition(suc, fail);
}

getLocation();
console.log(currentLatitude+':'+currentLongitude);


您会在日志中看到undefined : undefined,因为您是在计划的getCurrentPosition()之后但尚未执行之前进行记录的。您确实应该将使用currentLatitudecurrentLongitude的代码放在suc()回调中。或者,如果您想使内容分开,请编写一个useLocation()函数,并在您的suc()回调中调用它。

关于javascript - 无法在回调中设置变量值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25170546/

10-09 09:55