【发布时间】:2015-05-05 04:59:40
【问题描述】:
当使用 $.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);
也就是说,当您将多个函数传递给 done 时,它们会以相同的顺序为每个参数解析?
编辑:这里有来自我希望的用例的更多信息:
$.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();
});
【问题讨论】:
-
你的问题对我来说没有意义。你的意思是你不想等待两个请求都完成,而是单独触发他们的
.done()回调?那你为什么要使用$.when? -
就我而言,我想要: $.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2).done(我的继续Fn);也就是说, myFn 和 myFn2 正在记住 myContinuationFn 的数据,但我想将其与数据处理分开。现在有意义吗?
-
你当前的代码看起来很乱。为什么要使用全局的
tweets和users变量,为什么不向那个显示函数传递任何东西呢?不是很好的做法。 -
变量在用于 jqury 插件的闭包中作用域。所以这些变量被其他方法使用。 ...