第一種
描述:如果條件許可,把兩次請求都放在服務端處理掉一起發回來,這些就在客戶端只有一次ajax了
優點:代碼放在服務端,安全性比較,且服務端處理速度較快
缺點:可能請求的數據格式是json,這樣在服務端處理JSON數據還需要對JSON進行反序列化,這樣就比較麻煩
第二種
描述:是我第一次解決這個問題的時候用的比較蠢的辦法,第一次請求的ajax,循環值PUSH到公共變量中去,然后用這個公共變量作為參數去請求第二個ajax

1 $.ajax({ 2 cache: false, 3 type: 'POST', 4 url: url1, 5 dataType: 'json', 6 success: function (data) { 7 var list=""; 8 //用,做隔斷發回后台用split取值 9 for(var i=0;i<data.length-1;i++) 10 { 11 list+= data[i].id; 12 if (i != data.length - 1) { 13 list+= ","; 14 } 15 } 16 17 $.ajax({ 18 cache: false, 19 type: 'POST', 20 url:url2, 21 data: { para: list}, 22 dataType: 'json', 23 success: function(result) { 24 ....... 25 } 26 }) 27 } 28 })
優點:節省開銷
缺點:這樣寫的確有點蠢...除了蠢之外 我再補充一點 這樣做第二次ajax只能是自己去請求自己服務器,如果是別人的服務 不可能給你拆分參數
第三種
描述:使用async :false。ajax默認async是為ture的,當async: true 時,ajax請求是異步的。但是其中有個問題:ajax請求和其后面的操作是異步執行的,那么當頁面還未執行完,就可能已經執行了 ajax請求后面的操作。當async:false時,ajax請求為同步,這時Ajax請求將整個瀏覽器鎖死,直到請求結束

1 $.ajax({ 2 cache: false, 3 type: 'POST', 4 url: url1, 5 async: false, 6 dataType: 'json', 7 success: function (result) { 8 for(var i=0;i<result.length-1;i++) 9 { 10 $.ajax({ 11 cache: false, 12 type: 'POST', 13 url: url2, 14 async: false, 15 dataType: 'json', 16 success: function (data) { 17 ... 18 } 19 }); 20 } 21 } 22 })
優點:可以按照邏輯順序正常的寫代碼
缺點:同步時整個頁面是被鎖死的