如何處理ajax中嵌套一個ajax


第一種

描述:如果條件許可,把兩次請求都放在服務端處理掉一起發回來,這些就在客戶端只有一次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 })
復制代碼

優點:可以按照邏輯順序正常的寫代碼

缺點:同步時整個頁面是被鎖死的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM