如何为多个ajax请求创建集中回调?

时间:2013-11-27 16:09:09

标签: jquery ajax jquery-deferred

我希望能够发送多个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
}

1 个答案:

答案 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://forum.jquery.com/topic/using-when-to-deal-with-response-of-multiple-ajax-calls-deferred-objects

要探索的文章

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/