我想確保結果顯示給用戶,所以我做了同步AJAX調用。使用異步AJAX(示例無處不在)顯示「加載」指示器非常簡單,但是當我使用XMLHttpRequest同步AJAX調用時,加載指示器GIF圖像根本不顯示。如何在純JavaScript中進行'同步'AJAX調用時顯示'加載'?
有人說,在做同步呼叫時阻塞指示器是不可能的(阻塞直到有服務器響應)。但我只想問問是否有辦法做到這一點。
我想確保結果顯示給用戶,所以我做了同步AJAX調用。使用異步AJAX(示例無處不在)顯示「加載」指示器非常簡單,但是當我使用XMLHttpRequest同步AJAX調用時,加載指示器GIF圖像根本不顯示。如何在純JavaScript中進行'同步'AJAX調用時顯示'加載'?
有人說,在做同步呼叫時阻塞指示器是不可能的(阻塞直到有服務器響應)。但我只想問問是否有辦法做到這一點。
這是「不可能的」,因爲Javascript是單線程的,並且同步調用會阻止UI的更新。
但是,您可能會在啓動同步AJAX調用之前顯示動畫「加載」圖形,並在成功或失敗時刪除它。我相信即使在技術上阻止同步呼叫時,大多數瀏覽器仍然能夠繼續呈現動畫GIF。
這是可能的,看到上面的答案在這裏: How to show waiting message during sync ajax call in browser
的解決方案是,以顯示您加載消息,手動控制返回給瀏覽器,然後鎖定一切與您同步遠程調用。一種方法是使用延遲爲零的setTimeout
是的。它可以顯示圖形,然後使用(很短的)'setTimeout'來啓動同步Ajax,以便瀏覽器在運行Ajax之前有機會重新繪製。 – nnnnnn
@nnnnnn這並不能保證瀏覽器可以得到繪製的機會。瀏覽器花費在繪圖上的時間是不可測量的 – jondinham
@Paul - 是的,但是(取決於瀏覽器)僅僅通過超時分解代碼就足以讓它重新開始繪製,一旦開始重新繪製,它可能會好。問題是什麼時候它甚至不開始重新繪製。 – nnnnnn