0

合金のモデルを使用して認証しようとしています。私は昨日からこの問題を理解しようとしてきました。誰かが私を助けることができれば、本当に感謝しています。したがって、ビューがありlogin.xml、次にコントローラーがありlogin.jsます。login.jsには次の機能が含まれています。

var user = Alloy.Models.user; //my user.js model
function login(e) {
    if($.username.value !== '' && $.password.value !== ''){
        if(user.login($.username.value, $.password.value)){
            Alloy.createController('home').getView().open();
            $.login.close();
        }
    }else{
        alert('Username and/or Password required!');
    }
}

次に、私のuser.jsモデルでは、次のようになります。

extendModel : function(Model) {
    _.extend(Model.prototype, {
        login: function(username, password) {
            var first_name, last_name, email;
            var _this = this;
            var url = 'http://myurl.com/test.php';
            var auth = Ti.Network.createHTTPClient({
                onerror: function(e){
                    alert(e.error);
                },
                onload: function(){
                    var json = this.responseText;
                    var response = JSON.parse(json);
                    if(response.logged == true){
                        first_name = response.f_name;
                        last_name = response.l_name;
                        email = response.email;
                        _this.set({
                            loggedIn: 1,
                            username: email,
                            realname: first_name + ' ' + last_name,
                            email: email,
                        });
                        _this.save();
                    }else{
                        alert(response.message);
                    }
                },
            });

            auth.open('POST', url);
            var params = {
                usernames: username,
                passwords: password,
            };
            auth.send(params);
            alert(_this.get('email')); //alert email
        },
    });

ログインをクリックすると、 の関数がlogin.xml呼び出されます。だから、今私の問題は、ボタンを初めてクリックすると、から空のアラートが表示されることですが、ボタンを2回目にクリックすると、すべてが正常に機能し、電子メールにアラートが送信されます。何が起こっているのかわかりません。お手伝いありがとう。loginindex.jsalert(_this.get('email'))

4

1 に答える 1

1

同じ問題に遭遇する可能性のある人々のために、私はそれを理解したと思います. コールバック関数を使用してそれを行いました。

このTitanium HTTPリクエストを参照してください

今、私は次のようにuser.js見えます:

extendModel : function(Model) {
_.extend(Model.prototype, {
    login: function(username, password, callback) {
        var first_name, last_name, email;
        var _this = this;
        var url = 'http://myurl.com/test.php';
        var auth = Ti.Network.createHTTPClient({
            onerror: function(e){
                alert(e.error);
            },
            onload: function(){
                var json = this.responseText;
                var response = JSON.parse(json);
                if(response.logged == true){
                    first_name = response.f_name;
                    last_name = response.l_name;
                    email = response.email;
                    _this.set({
                        loggedIn: 1,
                        username: email,
                        realname: first_name + ' ' + last_name,
                        email: email,
                    });
                    _this.save();
                    callback(foo); //whatever you want to send

                }else{
                    alert(response.message);
                }
            },
        });

        auth.open('POST', url);
        var params = {
            usernames: username,
            passwords: password,
        };
        auth.send(params);
    },
});

そして、私は次のようにlogin.js見えます:

var user = Alloy.Models.user; //my user.js model
function login(e) {
    if($.username.value !== '' && $.password.value !== ''){
        var logged_in = user.login($.username.value, $.password.value, function(foo){
            if(foo == bar)
                call_another_function(); 
        });
    }else{
       alert('Username and/or Password required!');
   }
}

ありがとう。これが役立つことを願っています。

于 2013-10-31T16:39:15.447 に答える