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,因为它们被定义为全局。价值没有改变。但是当我做console.log(p.coords.latitude)时,它给了我价值。
我尝试了很多东西,但似乎没有任何工作。我很确定我的逻辑是错误的。
答案 0 :(得分:1)
您的问题来自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()
回调中调用它。