jQuery,同时调用ajax和$.when
在使用$.ajax().done时,目前您可以做一些简单的事情,如:jQuery,同时调用ajax和$.when,jquery,ajax,promise,Jquery,Ajax,Promise,在使用$.ajax().done时,目前您可以做一些简单的事情,如: $.getJSON('url').done(myFn); $.getJSON('url2').done(myFn2); 但是当您使用$时,当使用相同的两个ajax调用时,您需要执行一个“奇怪”的操作 有没有一种方法可以做到: $.when($.getJSON('url'), $.getJSON('url2')).done(myFn, myFn2); 也就是说,当您将多个函数传递给done时,它们将按相同的顺序为每个参数解析
$.getJSON('url').done(myFn);
$.getJSON('url2').done(myFn2);
但是当您使用$时,当使用相同的两个ajax调用时,您需要执行一个“奇怪”的操作
有没有一种方法可以做到:
$.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();
});
你被要求做一件“奇怪”的事
不是,我认为你的语法很好地表达了你正在做的事情。如果你认为应该有一个速记-不,没有,因为你想做的是奇怪的(一个不寻常的用例)
如果您需要此的通用版本,请使用
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]);
你的问题对我来说毫无意义。您的意思是不想等待两个请求都完成,而是分别启动它们的
.done()
回调?那么为什么要使用$。when
?在我的例子中,我希望:$.when($.getJSON('url'),$.getJSON('url2')).done(myFn,myFn2).done(myContinuationFn);也就是说,myFn和myFn2正在为myContinuationFn记住数据,但我希望将其与数据处理分开。现在有意义了吗?您当前的代码看起来一团糟。为什么要使用全局推文
和用户
变量,为什么不向该显示函数传递任何信息?不完全是好的做法。Thé变量的作用域是用于jqury插件的闭包。所以这些变量被其他方法使用。。。
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]);