1

我正在使用 jQuery 1.11,但是如果我想在需要彼此等待的地方执行多个 Ajax 请求,那么唯一的解决方案是像这样嵌套它们:

// Ajax #1 -------------------------------
$.ajax({
  dataType: "json",
  url: "index.json",
  data: { urlVar1:val1,urlVar2:val2},
  success: function(data1) {

    // stuff for Ajax #1 ...

    // Ajax #2 ---------------------------
    $.ajax({
      dataType: "json",
      url: "index.json",
      data: { urlVarA:data1-val1,urlVarB:data1-val2},
      success: function(data2) {

        // stuff for Ajax #2 ...

        // Ajax #3 -----------------------
        $.ajax({
          dataType: "json",
          url: "index.json",
          data: { urlVarX:data2-val1,urlVarY:data2-val2},
          success: function(data3) {

            // stuff for Ajax #3 ...

          } // $.ajax.success #3
        }); // $.ajax #3 -----------------

      } // $.ajax.success #2
    }); // $.ajax #2 ---------------------


  } // $.ajax.success #1
}); // $.ajax #1 -------------------------

在现实生活中,我需要Ajax #1获取多个组......Ajax #2应该处理这些组并获取子组,并且Ajax #3应该从这些子组中获取单独的行。

从理论上讲,我可能一次调用就可以完成这 3 个 Ajax 调用,但这只是为了理解如何做到这一点,因为我认为嵌套方法很快就会在我的代码中变得过于混乱。

4

2 回答 2

2

.then 会使这更清洁。

// Ajax #1 -------------------------------
$.ajax({
    dataType: "json",
    url: "index.json",
    data: { urlVar1:val1,urlVar2:val2}
}).then(function(data1){
    // Ajax #2 ---------------------------
    return $.ajax({
        dataType: "json",
        url: "index.json",
        data: { urlVarA:data1-val1,urlVarB:data1-val2}
    });
}).then(function(data2) {

    // stuff for Ajax #2 ...

    // Ajax #3 -----------------------
    return $.ajax({
        dataType: "json",
        url: "index.json",
        data: { urlVarX:data2-val1,urlVarY:data2-val2}
    });
}).then(function(data3) {
    console.log(data3);
}).fail(function(){
    console.log("something happened...",arguments);
    console.log(this.url)
});
于 2013-10-07T19:19:30.550 回答
0

也许你可以试试这个:

$.when( $.getJSON('index.json', { urlVar1 : val1, urlVar2 : val2 }), 
        $.getJSON('index.json', { urlVarA : data1-val1, urlVarB : data1-val2 }), 
        $.getJSON('index.json', { urlVarX : data2-val1, urlVarY : data2-val2 }) 
).then(function(data1, data2, data3){
    console.log(data1);
    console.log(data2);
    console.log(data3);
});
于 2013-10-08T08:05:53.057 回答