ajax請求執行完成后再執行其他操作(jQuery.page.js插件使用為例)


就我們做知,ajax強大之處在於它的異步請求,但是有時候我們需要ajax執行徹底完成之后再執行其他函數或操作

這個時候往往我們用到ajax的回調函數,但是假如你不想或者不能把接下來的操作寫在回調函數中,怎么辦?

jquery.page.js插件為例,分頁初始化如下:

$(".tcdPageCode").createPage({
        pageCount:100,
        current:1,
        backFn:function(p){
            //console.log(p);
        }
    });

這里pageCount總頁數我需要從后台動態獲取,也就是需要ajax請求接口后返回的值

一開始我把分頁初始化的這段代碼寫在ajax的回調函數中

function getRecourcesAction(result) {
    if (result != null) {
       $(".tcdPageCode").createPage({   
        pageCount: result.pageCount,
        current: nowPage,
        backFn: function (p) {
            pageNo=p-1;
            nowPage=p;
            getRecources(getRecourcesAction);
        }
    });
        var html = template('recources', {
            list: result.data
        });
        $("#recource li").remove();
        $("#recource").append(html);
    } 
    else {
        layer.open({
                title: '提示',
                content: "資源查詢失敗!"
            });
    }
}

因為backFn中會繼續請求,所以會重復創建,上一頁、下一頁翻頁時會出現連續跳頁的情況,最后超出總頁數而溢出出錯

解決辦法:

設置全局變量pageCount,先進行ajax請求,得到返回的總頁數后賦值給pageCount,然后再進行初始化分頁。注意:ajax請求時,設置async: false(默認為true),進行同步請求,即Ajax請求將整個瀏覽器鎖死,只有請求結束后才能執行其他操作,否則pageCount值還未返回就先初始化分頁了。

$(function(){
    getRecources(getRecourcesAction);   //初始化頁面(資源初始化)
  
    //初始化分頁
    $(".tcdPageCode").createPage({   
        pageCount: pageCount,
        current: nowPage,
        backFn: function (p) {
            pageNo=p-1;
            nowPage=p;
            getRecources(getRecourcesAction);
        }
    });
});

 


免責聲明!

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



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