1. 程式人生 > >ajax嵌套ajax 可能出現問題 的解決辦法

ajax嵌套ajax 可能出現問題 的解決辦法

數據 asc lap 一起 div lis push 異步執行 post

ajax由於他的異步特性 在第一次請求中的循環中嵌套第二個ajax會數據會讀不出來

第一種

描述:如果條件許可,把兩次請求都放在服務端處理掉一起發回來,這些就在客戶端只有一次ajax了

優點:代碼放在服務端,安全性比較,且服務端處理速度較快

缺點:可能請求的數據格式是json,這樣在服務端處理JSON數據還需要對JSON進行反序列化,這樣就比較麻煩

第二種

描述:是我第一次解決這個問題的時候用的比較蠢的辦法,第一次請求的ajax,循環值PUSH到公共變量中去,然後用這個公共變量作為參數去請求第二個ajax

$.ajax({
        cache: false,
        type: ‘POST‘,
        url: url1,
        dataType: ‘json‘,
        success: function (data) {
            var list="";
            //用,做隔斷發回後臺用split取值
            for(var i=0;i<data.length-1;i++)
            {
                 list+= data[i].id;
                if (i != data.length - 1) {
                    list+= ",";
                }
            }
            
             $.ajax({
                cache: false,
                type: ‘POST‘,
                url:url2,
                data: { para: list},
                dataType: ‘json‘,
                success: function(result) {
                .......
                 }
             })
        }
})

  

優點:節省開銷

缺點:這樣寫的確有點蠢...除了蠢之外 我再補充一點 這樣做第二次ajax只能是自己去請求自己服務器,如果是別人的服務 不可能給你拆分參數

第三種

描述:使用async :false。ajax默認async是為ture的,當async: true 時,ajax請求是異步的。但是其中有個問題:ajax請求和其後面的操作是異步執行的,那麽當頁面還未執行完,就可能已經執行了 ajax請求後面的操作。當async:false時,ajax請求為同步,這時Ajax請求將整個瀏覽器鎖死,直到請求結束

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

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

ajax嵌套ajax 可能出現問題 的解決辦法