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()
之后但尚未执行之前进行记录的。您确实应该将使用currentLatitude
和currentLongitude
的代码放在suc()
回调中。或者,如果您想使内容分开,请编写一个useLocation()
函数,并在您的suc()
回调中调用它。关于javascript - 无法在回调中设置变量值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25170546/