2014-11-25 20 views
0

我不能为我的生命明白为什么这是不工作...jQuery的链AJAX调用

function Register(email, password) { 

var data = { 
    Email: email, 
    Password: password, 
    ConfirmPassword: password 
}; 

return $.ajax({ 
    type: 'POST', 
    url: baseUrl + 'api/Account/Register', 
    contentType: 'application/json; charset=utf-8', 
    data: JSON.stringify(data) 
}) 

} 

function Login(email, password) { 

var data = { 
    grant_type: 'password', 
    username: email, 
    password: password 
}; 

return $.ajax({ 
    type: 'POST', 
    url: baseUrl + 'Token', 
    data: data 
}).done(function (data) { 
    sessionStorage.setItem(tokenKey, data.access_token); 
}); 

} 

现在......我想在一个按钮,点击注册,然后登录...

var email = $('input[name="email"]').val(); 
var password = $('input[name="password"]').val(); 

Register(email, password).then(Login(email, password)) 

但是,该代码不会按顺序调用它们。它通常首先登录。

我自己也尝试做过()和()的时候,但我真的不理解的差异,也许需要一些帮助...

+0

我相信你需要添加异步:假到您的ajax调用。但我不会这样做。它会持续下去,直到ajax完成运行。我会把登录放入你的ajax调用的成功函数中。 – 2014-11-25 01:13:01

回答

1

我认为问题是,它会立即评估Login(email, password)

尝试: Register(email, password).then(function() { Login(email, password); });

+0

谢谢,这工作...我讨厌javascript ...任何洞悉你为什么需要额外的包装功能? – hatcyl 2014-11-25 01:25:41

+1

你调用它的方式,它首先调用'Register',然后调用'Login',因为它将'Login'函数返回的值传递给'.then()'。通过添加包装器,'Login'函数不会被执行,直到'Register'返回的延迟解决。 – rdubya 2014-11-25 01:28:31

+0

@hatcyl - JavaScript在这方面与大多数语言没有区别。如果你将'Login(xxx)'作为参数传递给一个函数或方法,它将立即以我所知道的所有语言被调用。这不仅仅是一个Javascript的东西。传递一个函数引用(以便稍后可以调用它)与现在调用一个函数并传递其返回结果的语法不同。你所做的只是一个常见的编程错误,而不是Javascript独有的东西。 – jfriend00 2014-11-25 05:11:17

1
function Register(email, password) { 

    var data = { 
     Email: email, 
     Password: password, 
     ConfirmPassword: password 
    }; 

    return $.ajax({ 
     type: 'POST', 
     url: baseUrl + 'api/Account/Register', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(data), 
     success: function(msg) { 
      Login(email, password); 
     } 
    }) 

} 
+0

谢谢,虽然这会起作用,但当你需要将许多功能链接在一起时,它会很快变得丑陋,有时甚至是有条件的。我试图用它“承诺”的方式......但我是一个大白菜。 – hatcyl 2014-11-25 01:26:44