1. 程式人生 > >ajax請求與UI程序阻塞

ajax請求與UI程序阻塞

轉自:http://blog.csdn.net/web_xyk/article/details/52292183

在與後臺實現資料互動時經常會遇到一種這樣的情況:

1.需要用一個ajax請求後臺資料,並且要在獲取到資料之後再渲染到頁面,這個時候就必須用同步(async:false

2.然而在這個時候就會有另一種情況,當ajax的請求花費的時間比較長的時候需要一個loading層來顯示等待狀態

3.這個時候beforeSend是沒有效果的,即使把loading的程式碼寫在ajax之前也不行。

4.原因就是ajax的async設定為false時瀏覽器的渲染(UI)執行緒和js執行緒是互斥的,在執行js耗時操作時,頁面渲染會被阻塞掉。當我們執行非同步ajax的時候沒有問題,但當設定為同步請求時,其他的動作(ajax函式後面的程式碼,還有渲染執行緒)都會停止下來。即使我的DOM操作語句是在發起請求的前一句,這個同步請求也會“迅速”將UI執行緒阻塞,不給它執行的時間。這就是程式碼失效的原因。

5.解決方法(注意:是在非同步下實現的):如圖