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 回答