“可惡”的ajax 同步請求

可惡ajax 同步請求

 

因爲這個原因,浪費了我好幾個小時.

在工作中碰到這樣的需求:

後續的方法必須等待前置任務完成後方可去執行,否則後續方法無法取到前置任務生成的數據.

而前置任務當中使用到了ajax請求向後臺請求一些數據,供後續方法使用.

 

開始的想法:

function load(){

前置任務();     //使用了ajax請求,並設置了異步爲false.

後續任務();  //讀取前置任務返回的數據

}

 

現象:

FF:一切正常,偶爾有點小問題,得到不到數據

IE:無法獲取數據

總結原因:

對ajax的同步請求,與程序的中斷概念不清.

ajax的同步請求,並不會中斷當前程序的運行.

解決方案:

//定義一全局變量,數量爲當前頁面共發出的ajax請求數量
var requestCount = 1;
function load() {
   /*
    使用了ajax請求,並設置了異步爲false.
    在ajax回調函數中,將requestCount--
    確保所有請求數據最後爲0;
    */
    前置任務();
    //執行後續方法
    latter();
}
function latter() {
    /*
       如果請求數量爲0,代表當前所有ajax請求已完成
       那可以進行後續任務,否則使用定時器,每隔500毫秒
       去重新執行一次這個方法
     */
    if (requestCount == 0) {
        //讀取前置任務返回的數據
        後續任務();
    }else{
        window.setTimeout("latter()",500);
    }
}

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章