如何在div内加载网页并解决jQuery同步XMLHttpRequest弃用报错
问题原因
jquery.min.js:2 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience
该警告的核心是主线程上的同步XMLHttpRequest请求已被废弃,同步请求会阻塞浏览器渲染流程,请求完成前无法响应用户任何操作,对体验影响极大。你当前贴出的父页面代码中的.load()方法默认就是异步请求,问题不出在这段代码本身,而是来源于你加载的home.html、pageOne.html等子页面内部。
排查&解决步骤
- 检查所有子页面的全局AJAX配置
查看子页面代码中是否设置过$.ajaxSetup({async: false}),如果有直接删除该行,或者将参数改为async: true即可。 - 检查子页面内的独立AJAX请求
如果子页面内有单独写的$.ajax()、$.get()、$.post()请求,检查是否给单个请求设置了async: false参数,全部删除该参数即可。 - 检查子页面的脚本引入方式
如果子页面内使用document.write()方法加载外部脚本,或者script标签上设置了async="false"属性,全部改为正常静态script标签引入,或用动态创建DOM的方式异步加载脚本。 - 本地调试使用HTTP服务访问
如果你是直接双击html文件用file://协议打开页面调试,部分浏览器的安全限制也可能触发该警告,可使用VSCode的Live Server插件、本地搭建Nginx/Apache等HTTP服务访问页面即可。
可选代码优化
你原有功能代码无需修改,可添加加载错误回调方便排查问题,参考代码如下:
<div class="warper"> <div class="menu"> <a href="#" data-target="home">Home</a> <a href="#" data-target="pageOne">Page One</a> <a href="#" data-target="pageTwo"> Page Two</a> <a href="#" data-target="pageThree">Page Three</a> </div> <div id="content"></div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script> $(document).ready(function () { // 新增加载回调处理错误 $("#content").load('home.html', function(response, status, xhr) { if(status == "error") { $(this).html("页面加载失败:" + xhr.status + " " + xhr.statusText); } }); var trigger = $('.menu a'), container = $('#content'); trigger.on('click', function () { var $this = $(this), target = $this.data('target'); // 新增加载回调处理错误 container.load(target + '.html', function(response, status, xhr) { if(status == "error") { $(this).html("页面加载失败:" + xhr.status + " " + xhr.statusText); } }); return false; }); }); </script>
内容的提问来源于stack exchange,提问作者user15069511
相关产品推荐
相关产品推荐

