1. 程式人生 > >Chrome控制檯黃色警告: [Deprecation] Synchronous XMLHttpRequest ...的解決辦法

Chrome控制檯黃色警告: [Deprecation] Synchronous XMLHttpRequest ...的解決辦法

最近在做一個裝置後臺管理系統,前端向後臺伺服器傳送AJAX請求時,Chrome瀏覽器控制檯有一條黃色警告,雖然不影響程式碼執行,但是看著始終覺得不舒服,於是我就查資料準備解決;

錯誤提示如下:

[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

首先來看看這條警告的大概含義:

主執行緒上的同步XMLHttpRequest由於其對終端使用者體驗的不利影響而被棄用。 如需更多幫助,請檢視https://xhr.spec.whatwg.org/。

原來是因為我在向服務端傳送請求時使用的AJAX同步請求,AJAX請求分非同步和同步2種模式。如果請求是同步的,在請求返回之前執行緒會一直阻塞,如果請求是在主執行緒中發起的,那就會造成整個瀏覽器阻塞。
在HTML5以前,JavaScript是完全的單執行緒方式,主執行緒之外不存在其他執行緒。但在HTML5中增加了Worker物件,每個Worker執行在一個獨立的執行緒中,Worker執行緒被阻塞一般是不會影響主執行緒和瀏覽器的。因此,如果非要使用同步的Ajax(這種情況應該很少見),那就放到Worker執行緒中吧,千萬不要放到主執行緒裡。

既然已經明確了問題所在,那麼解決問題就相對容易很多;

解決方法:改同步請求為非同步請求;

這種方式簡單粗暴,也行之有效,如果程式中不是非要使用同步請求不可的話,建議還是儘量不要使用同步請求;畢竟AJAX預設請求方式就是非同步請求;

 

除了使用同步AJAX請求會產生這樣的警告外,下面這種方式也會產生黃色警告;

從後臺請求回來html程式碼段裡面包含了<script src="/scripts/script.js"></script>

解決辦法:將 <script src="/scripts/script.js"></script> 提前寫入前臺頁面,從傳送過來的HTML 程式碼段剝離出去;

 

本文參考資料:https://blog.csdn.net/sky786905664/article/details/53079487