1

私はember jsが初めてで、ルーティングを理解しようとしています:)

これが私のコントローラーコードです:

App.AppController = Em.ArrayController.extend({

login: App.Login.create({}),

loginUser: function(){
    $.ajax({
        type: 'POST',
        cache: false,
        url: contextPath + 'user/register',
        data:{name:this.login.name, email:this.login.email,password:this.login.password,confirmPassword:this.login.confirmPassword,acceptTerms:this.login.acceptTerms},
        success: function(data) {
            alert('success!');
        },
        error: function(jqXHR, textStatus, errorThrown) {

        }
    });
}
})

関数を使用する場所は次のとおりです。

App.ChooseServiceIndexRoute = Em.Route.extend({
redirect: function() {
    var isLoggedIn = this.controllerFor('app').loginUser();
    alert(isLoggedIn);
    if(isLoggedIn){
        this.transitionTo('chooseService');
    }
    else {
        this.transitionTo('app');
    }
}
});

関数loginUserが呼び出されるようですが、関数が完了する前にアラート(isLoggedIn)が発生します(アラート(成功)はアラート(isLoggedIn)の後に発生します)。

何が起こっているのかを理解するために、いくつかの助けを借りることができます。

ありがとう!

4

1 に答える 1

2

Ajax は非同期 Javascript および XML を意味するため、定義上は非同期です。つまり、コードが完了するまで停止せず、読み込みが完了するとコールバックが実行されます。asyncを false に設定して、完了するまで実行を停止することができます。ただし、タイムアウトなどには注意する必要があります。

ここで利用可能なオプションを確認してください: $.ajax ドキュメント

于 2013-03-23T00:23:19.597 に答える