我不确定我是不是真的很蠢或者只是错过了什么,但基本上我正在尝试访问变量latitude并将其放在params变量中以便我可以在post请求中发送它,但它不会似乎工作,如果我在函数外的params之前警告变量纬度我给它分配一个值,警报返回空白。我的代码如下所示:
var latitude;
Titanium.Facebook.requestWithGraphPath('me', {}, 'GET', function(e) {
if (e.success) {
var user = eval('('+e.result+')');
var currentTime = new Date();
var hours = currentTime.getHours();
var minutes = currentTime.getMinutes();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
if (Ti.Geolocation.locationServicesEnabled) {
Titanium.Geolocation.purpose = 'Get Current Location';
Titanium.Geolocation.getCurrentPosition(function(e) {
if (e.error) {
alert('Error: ' + e.error);
} else {
latitude = e.coords.latitude;
longitude = e.coords.longitude;
accuracy = e.coords.accuracy;
}
});
} else {
alert('Please enable location services');
}
alert(latitude);
var params = {
username: user.username,
gender: user.gender,
lastOnline:day+"/"+month+"/"+year+" - "+hours+":"+minutes,
latitude:latitude,
//longitude:longitude,
//accuracy:e.coords.accuracy,
};
答案 0 :(得分:1)
很确定这是标准“期望异步函数同步运行”的问题。虽然我不熟悉titanium-mobile,但我猜测Titanium.Geolocation.getCurrentPosition
是一个异步函数 - 这意味着你指定的回调函数在下一个语句alert(latitude);
之前就不会运行了,执行。
要解决此问题,您需要确保在回调函数中调用需要设置地理位置的任何内容,而不是之前:
Titanium.Geolocation.getCurrentPosition(function(e) {
if (e.error) {
alert('Error: ' + e.error);
} else {
var params = {
username: user.username,
gender: user.gender,
lastOnline: day+"/"+month+"/"+year+" - "+hours+":"+minutes,
latitude: e.coords.latitude,
longitude: e.coords.longitude,
accuracy: e.coords.accuracy
};
// now do something with params
initializeStuff(params);
}
});