js代碼:
環境:IE11
要求:點擊一個按鈕后,頁面xxx的地方立即顯示"開始處理...",直到ajax處理結束后,xxx內容才更新為新的處理結果;
點擊事件執行代碼如下:
xxx.innerHTML="開始處理...";
$.ajax(...async:false,...);//ajax同步
問題:
點擊按鈕后,頁面上並沒有顯示"開始處理...";而是在ajax執行完后,頁面xxx位置直接顯示處理后的結果;
個人解析:
js執行innerHTML到頁面顯示"開始處理..."是2個動作,一個是js執行,一個是瀏覽器渲染,中間有個時間差,
js執行完innerHTML后,頁面上還沒來得及顯示"開始處理..."時,js就執行到了ajax部分,而ajax同步會導致鎖定瀏覽器,表現為頁面內容不會更改;
當ajax執行回調函數時,對xxx內容進行二次賦新值,所以在"開始處理..."還未顯示時,由於此時xxx已經更新為新值,頁面之后直接顯示為新值;
如何讓頁面在執行ajax期間顯示innerHTML中的內容"開始處理..."?
設置1個定時器,在innerHTML后延遲100ms再執行ajax;即:
xxx.innerHTML="開始處理...";
setTimeout(function(){
$.ajax(...async:false,...);//ajax同步
},100);