2013-10-07 67 views
1

,如果我想要做後海誓山盟幾個Ajax請求,他們需要等待海誓山盟我使用jQuery的1.11,但什麼,是唯一的解決方案,然後將它們巢這樣的:如何根據彼此做多個jQuery 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調用,但這同樣可以理解如何實現這一點,因爲我認爲嵌套方法在我的代碼中很快就會變得太亂。

+0

試圖把他們的功能 –

+0

你真的不問一個問題,猜測異步導致您的問題。只需在每個'$ .ajax'調用'async:false' – James

+0

@James no ...只是不... –

回答

2

。然後將使這更清潔。

// 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) 
}); 
+0

我喜歡這種方法,但我怎麼看到失敗發生的地方?我試過這段代碼,然後包含一個不存在的文件,它只是給了我404頁但不包含Ajax範圍/調用失敗的文件? – DHS

+0

'this'裏面的失敗應該是失敗的請求的ajax選項,因爲您應該能夠獲取url。 –

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); 
}); 
+0

我需要處理Ajax GETs之間的東西,所以我不能使用這種方法,因爲它們都在'.then'方法中組合在一起。 – DHS

+0

@JohnMalli哦,對不起..然後這將無法正常工作,但您可以使用getJSON調用,而不是ajax。我認爲它更清潔。 –