钛合金移动并不能获得功能之外的变量值

时间:2011-12-10 00:29:35

标签: javascript titanium-mobile

我不确定我是不是真的很蠢或者只是错过了什么,但基本上我正在尝试访问变量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,
                    };

1 个答案:

答案 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);
    } 
});