当使用 $.ajax().done 时,目前,您可以做一些巧妙的事情,例如:
$.getJSON('url').done(myFn);
$.getJSON('url2').done(myFn2);
但是当你使用 $.when 进行相同的 2 个 ajax 调用时,你需要执行一个“奇怪”的事情
$.when($.getJSON('url'), $.getJSON('url2')).done(function(res1, res2) {
myFn(res1[0], res1[1], res1[2]);
myFn2(res2[0], res2[1], res2[2]);
});
有没有办法做这样的事情:
$.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2);
也就是说,当您将多个函数传递给完成时,它们会以相同的顺序针对每个参数进行解析?
编辑:这里有来 self 想要的用例的更多信息:
$.when($.getJSON('tweets'), $.getJSON('users'))
.done(rememberTweets, rememberUsers)
.done(displayTweetsWithUsers)
目前,我这样做:
var tweets, users;
$.when($.getJSON('tweets'), $.getJSON('users'))
.done(function(tweetsRes, usersRes) {
tweets = tweetsRes[0];
users = usersRes[0];
displayTweetsWithUsers();
});
最佳答案
you are required to perform a "strange" thing
不完全是,我认为你的语法很好地表达了你正在做的事情。如果您认为应该有一个简写 - 不,没有,因为您想要做的事情很奇怪(一个不寻常的用例)。
如果您需要此通用版本,请使用
function zipMapper(fns) {
return function() {
var args = arguments;
return fns.map(function(f, i) {
return args[i].length ? f.apply(this, args[i]) : f.call(this, args[i]);
}, this);
};
}
$.when($.getJSON('url'), $.getJSON('url2')).then(zipMapper([myFn, myFn2]);
关于jQuery,同时 ajax 调用和 $.when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30026209/