在Javascript中,我有两个对数据的异步请求:
$.getJSON('http://foo.com', fooQuery, fooSuccess(data));
$.getJSON('http://bar.com', barQuery, barSuccess(data));
和两个回调来处理收到的数据:
fooSuccess(data) { // Stuff }
barSuccess(data) { // More Stuff }
如何确保仅在fooSuccess完成后执行barSuccess?
注意:
非常感谢你的智慧和帮助!
答案 0 :(得分:5)
以下是使用ajax请求返回的jQuery延迟对象的方法。
var fooDfd = $.getJSON('http://foo.com', fooQuery);
var barDfd = $.getJSON('http://bar.com', barQuery);
fooDfd.then(function(fooData){
fooSuccess(fooData);
barDfd.then(barSuccess);
});
答案 1 :(得分:5)
最好的方法是使用jQuery when().done()
这样的功能:
$.when(
$.getJSON('http://foo.com', fooQuery, fooSuccess(data)),
$.getJSON('http://bar.com', barQuery, barSuccess(data))
).done(function(arg1, arg2){
fooSuccess(arg1);
barSuccess(arg2);
});
一旦所有请求成功完成,这允许同时执行AJAX请求并保证执行done()
函数。
答案 2 :(得分:1)
我在半个小时前跟随这篇非常有趣的帖子,当看到由@Mike Brant呈现的优雅解决方案时,我很快就会潜入jquery库,看看魔术是如何制作的。不是吗?我推荐,非常有趣! BTW我认为我们不需要那么神奇,不是在这种情况下,我们有两个异步调用处理程序(函数),无论哪个结束,我们需要知道第二个结束时,那么我们所需要的只是第三个函数这将由两个处理程序调用,并在所有数据准备就绪时执行。我知道这种方法将比优雅的jquery解决方案更多地消耗四到五行代码,但最终我们的大脑和灵魂将处于更好的状态。对不起我的英文。
答案 3 :(得分:-1)
将barSuccess
来电置于fooSuccess
成功回拨中。
fooSuccess(data){
jQuery.ajax({
data: data,
success: function(response){
barSuccess(data) //should still be in scope, I think?
}
}
}