我希望能够发送多个ajax请求并在一个回调中合并所有响应,我怎么能这样做而不会在每个请求中混乱回调?
而不是像这样的系统 - >发送ajax1 关于ajax1的成功 - >发送ajax2 在ajax2成功过程中都回答并呈现视图
我希望能够请求ajax1和ajax2
call ajax1
call ajax2
process answer from both requests in a single function
callback (response_ajax1, response_ajax2 ) {
// process information
}
答案 0 :(得分:1)
根据jquery,因为版本1.5我们可以使用Deferred对象。
[...]延迟可以被认为是表示异步(非实时)的一种方式 可能需要很长时间才能完成的操作(ajax请求是 其中一个例子)。
-
延迟对象是阻塞函数的异步替代方法 一般的想法是,而不是你的应用程序阻止它 在返回结果之前等待一些请求完成。
-
[...]可以立即返回延迟对象。
总结:
延迟对象提供了一种将多个回调注册到自我管理的方法 回调队列,根据需要调用回调队列,并中继 任何同步或异步函数的成功或失败状态..
回答这个问题: http://jsfiddle.net/mreis1/DCmrN/
function _ajax(id){
return $.ajax({
url: '/echo/json/',
type: 'GET',
dataType: 'json',
data: {param1: id},
complete: function(xhr, textStatus) {
//called when complete
},
success: function(data, textStatus, xhr) {
//console.log(data)
//called when successful
},
error: function(xhr, textStatus, errorThrown) {
//called when there is an error
}
});
}
// merge response data from both ajax calls when they are done
$.when( _ajax(1), _ajax(2) ).done(function(a1, a2){
console.log(a1, a2);
});
<强>文档强>
http://api.jquery.com/category/deferred-object/
类似问题
要探索的文章
http://www.tentonaxe.com/index.cfm/2011/9/22/Using-jQuerywhen-with-a-dynamic-number-of-objects
http://learn.jquery.com/code-organization/deferreds/
http://learn.jquery.com/code-organization/deferreds/examples/