最近在做一个设备后台管理系统,前端向后台服务器发送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