Joe*_*ito 1 ajax jquery chaining promise deferred
我已经看到很多关于这个的问题,但似乎没有什么能为我的案子提供正确的答案.我也看到了使用的答案,.pipe但我正在寻找一个使用的答案.then.
好的.我需要做3个ajax调用,让我们说一个允许多个帐户的民意调查应用程序.需要执行以便帐户可以投票的过程如下.
假设我有两个帐户:
var accts = [{user: "acct1", pswd: "1234"},{user: "acct2", pswd: "4321"}];
Run Code Online (Sandbox Code Playgroud)
现在我需要使用jquery来遍历这些帐户 $.each
$.each(accts, function(key,value){
});
Run Code Online (Sandbox Code Playgroud)
我了解到使用$.Deferred可以完美地做到这一点,但是正确的实现.
我想要的是
--------loop1--------
login
select
vote
--------loop2--------
login
select
vote
All Done!.
Run Code Online (Sandbox Code Playgroud)
但是会发生什么(当我尝试console.log发生的事情时)全部完成!登录(2)选择(2)投票(2)
所以这是我的代码:
$.each(data, function(k, v) {
promise.then(function() {
return $.post(loginURL, {user: v.username, passwrd: v.password});
}).then(function(html) {
if (data > 0) {
console.log('Logged In!');
return $.post(pollURL + 'select.php', {id: 143});
} else {
console.log('Login Failed.');
return false;
}
}).then(function(data) {
if (data === 'selected') {
console.log('Already have a selection.');
return false;
} else {
return $.post(pollURL + 'submit.php');
}
}).then(function(data){
if(data > 1) {
Console.log('Successfully Voted.');
} else {
// if possible return to the login?
}
});
});
promise.done(function() {
console.log('All Done. Logged out.');
});
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?.
嗯,这类似于我挣扎了一段时间的过程.我的解决方案是使用.applyjQuery .when来处理"未知"数量的ajax调用并解决所有问题.
根据您的情况,这并不是您所需要的,但它可能会为您提供有关如何攻击您的问题的一些想法.我试图在你想要做的事情的背景下陈述我的过程,所以
var ajaxArgs = [{id: 1, password: "qwerty"}, {id: 2, password: "zxcvb"}];
function doLogin(id, pass) {
return $.post("ws/path/here", {id: id, pass: pass});
}
var logins = $.when.apply(null, ajaxArgs.map(function(argSet) {
return doLogin(argSet.id, argSet.password);
});
logins.done(function(){
var logins = [].concat(arguments);
logins.forEach(function(login) {
//do Vote
//do Logout
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |