两个AJAX函数调用 - 最佳实践

时间:2013-11-06 17:06:43

标签: jquery ajax

我需要两个AJAX调用的结果,之后我将使用检索到的信息来创建表。

我很好奇......在另一个AJAX内嵌入一个AJAX调用,并在第二个{{1}}调用结束时保留用于创建表的代码,这是实现此目的的正确方法吗? p>

感谢您的帮助。

2 个答案:

答案 0 :(得分:9)

我建议使用jQuery deferreds。

$ajax1 = $.ajax({
    url: '/page1'
});

$ajax2 = $.ajax({
    url: '/page2'
});

$.when($ajax1, $ajax2).done(function(data1, data2){
    // data1[0] is the result of the 1st AJAX call,
    // and data2[0] is the result of the 2nd
    // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
});

两个AJAX调用都将被触发,.done只会在两个完成后才会运行。

$.when的文档:http://api.jquery.com/jQuery.when/

答案 1 :(得分:0)

第一个承诺是处理这个问题的好方法,但是jquery承诺实现并不是很好(它不符合规范),但它确实有效。如果你可以使用不同的库我推荐q.js,否则这里是如何在jquery

中做到这一点

我通常使用.then来管道第二个ajax调用的返回值并传递承诺

function makeRequests(){
  var req1 = $.ajax("myurl");

  return req1.then(function(data){
     var req2 = $.ajax("second/one")


     return req2;
  })
}

makeRequest().done(function(dataFromReq2){
    //do work after both are done
})

如果您需要并行执行这两个请求,请使用$.when(req1, req2)