“可惡”的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); } }