JavaScript console.log导致错误:"主线程上的同步XMLHttpRequest被废弃了..."。
我一直在向控制台添加日志,以检查不同变量的状态,而不使用Firefox调试器。
然而,在许多地方,当我在main.js
文件中添加console.log
时,我收到以下错误,而不是我对自己的可爱的小手写信息。
主线程上的同步XMLHttpRequest已被废弃,因为它对终端用户的体验有不利影响'。如需更多帮助,http://xhr.spec.whatwg.org/
我可以在我的代码中加入什么替代或包装console.log
的东西,而不会引起这个错误?
我是不是做错了?
371
20
这发生在我身上,当时我很懒,把一个脚本标签作为返回内容的一部分。就像这样。
部分HTML内容。
看起来,至少在我的例子中,如果你通过xhr返回这样的HTML内容,你会导致jQuery进行调用以获得该脚本。这个调用发生在一个异步标志为假的情况下,因为它假设你需要脚本继续加载。
在这样的情况下,你最好研究一下某种绑定框架,然后直接返回一个JSON对象,或者根据你的后台和模板,你可以改变你的脚本加载方式。
你也可以使用[jQuery'的
getScript()
](http://api.jquery.com/jQuery.getScript/)来抓取相关的脚本。这里有一个小插曲,它只是一个jQuery例子的直接拷贝,但我没有看到在以这种方式加载脚本时出现任何警告。**例子 ***
[http://jsfiddle.net/49tkL0qd/][1]
该警告信息可能是由于主线程内的XMLHttpRequest请求,其异步标志设置为false。
https://xhr.spec.whatwg.org/#synchronous-flag。
未来的方向是只允许在工作线程中进行XMLHttpRequests。该消息的目的是为此发出一个警告。
我也面临着同样的问题,但通过将async: true的方式来解决它。我知道它默认为 "真",但当我明确地写下它时,它就会工作。
Visual Studio 2015/2017'的实时调试器正在注入包含废弃调用的代码。
有时候需要ajax加载一个脚本,但要把*文档准备好的时间延迟到脚本加载之后。
jQuery使用
holdReady()
函数来支持这个功能。使用示例:
实际的脚本加载是异步的(没有错误),但如果你的JavaScript的其余部分在文档准备好后运行,效果是同步的。
>.这个高级的功能通常会被动态脚本使用。 这个高级的功能通常会被动态脚本使用。
文件:
https://api.jquery.com/jquery.holdready
<br>。
更新 2019年1月7日
来自JQMIGRATE。
为了避免这个警告,请不要使用。
中的任何$.ajax()调用。 这是XMLHttpRequest中唯一被废弃的功能。
默认的是
https://stackoverflow.com/questions/27736186/jquery-has-deprecated-synchronous-xmlhttprequest/27736383#27736383
@Webgr的部分回答其实帮我调试了这个警告@控制台日志,可惜该回答的另一部分带来了这么多的降权:(
总之,下面是我如何找到我的案例中这个警告的原因。
打开抽屉菜单(在Chrome浏览器中右上角的3个竖点)。
在Console > 勾选记录XMLHttpRequests选项。
重新加载给你带来错误的页面,并在控制台日志中观察每次ajax请求时发生的情况。
在我的案例中,另一个插件在每次ajax调用后加载了2个.js库,这绝对不是必需的,也不是必须的。 禁用该流氓插件后,日志中的警告就被删除了。 从这一点来说,你可以尝试自己解决这个问题(例如:将脚本的加载限制在一个新的水平。 限制脚本加载到特定的页面或事件 - 这是太具体了,在这里回答)或联系第三方插件开发人员来解决这个问题。
希望能帮到别人。
我一直在看答案都令人印象深刻。 我认为他应该提供的代码,是给他一个问题。 鉴于下面的例子,如果你有一个脚本在page.php中链接到jquery,那么你会得到这个通知。
在以下情况下,我收到这样的警告。
file1中包含
<script type="text/javascript".src="/javascript/jquery-1.10.2.js"></script>
; src="/javascript/jquery-1.10.2.js"></script>`。 页面有输入栏。 我在输入栏中输入一些值,然后点击按钮。 Jquery将输入发送到外部php文件。外部php文件也包含了jquery,并且在外部php文件中我也包含了
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
。 因为如果这样我就会收到警告。删除了
<script type="text/javascript" src="/javascript/jquery-1.10.2.js"></script>
从外部的php文件中删除了,并且没有警告。据我所知,在加载第一个文件(file1)时,我加载了 "jquery-1.10.2.js",由于页面没有重新加载(它使用jquery
$.post
向外部php文件发送数据),那么 "jquery-1.10.2.js "继续存在。 所以不需要再次加载它。在一个MVC应用程序中,我得到了这个警告,因为我打开Kendo窗口的方法是返回一个View(),而不是PartialView()。 View()试图再次检索页面的所有脚本。
我在ZF2中也发生过这种情况。 我试图加载Modal内容,但我忘记了之前禁用布局。
于是。
和@Nycen一样,我也是因为链接到Cloudfare而出现这个错误。 我的是Select2插件.
为了解决这个问题,我只是删除了
而错误也随之消失。
当我把一个 can.js 脚本包含在另一个 can.js 脚本中时,我得到了这样的异常,比如说
当我在查询中设置"example.com/files/text.txt"这样的url时,出现了这个异常。 我把url改为"http://example.com/files/text.txt"。 然后这个异常就消失了。
在我这里就解决了。
这个答案是在这个链接中插入的
[https://stackoverflow.com/questions/28322636/synchronous-xmlhttprequest-warning-and-script][1]
[1]: https://stackoverflow.com/questions/28322636/synchronous-xmlhttprequest-warning-and-script
在我的案例中,这是由于flexie脚本引起的,该脚本是"CDNJS Selections".应用程序的一部分,由Cloudflare提供。 应用程序提供的Cloudflare。
根据Cloudflare的说法"这个应用程序在2015年3月被废弃"。 我关闭了它,消息立即消失了。
你可以通过访问https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com,访问这些应用。
注:这是我在这个帖子上的回答。 这是我在这一主题上的答复的副本https://stackoverflow.com/questions/28322636/synchronous-xmlhttprequest-warning-and-script/30332136#30332136(我在寻找解决办法时访问了这两个主题)。
按F12
。开发工具-> 按
F1
。见设置->一般->外观。
"Don'不显示chrome Data Saver警告"
-设置这个复选框。见设置->一般->控制台。
"记录XMLHTTPRequest"
-也设置这个复选框。欣赏
对我来说,问题在于,在一个OK请求中,我希望ajax响应是一个格式良好的HTML字符串,如一个表格,但在这种情况下,服务器在请求中遇到了问题,重定向到一个错误页面,因此返回了错误页面的HTML代码(其中有一个
<script
标签。 我控制台记录了ajax响应,这时我才意识到这不是我所期望的,然后继续进行调试。我通过以下步骤解决了这个问题。
在我的特殊情况下,我在渲染一个Rails局部时没有使用
render layout.false
,这就会重新渲染整个布局,包括<head>
标签中的所有脚本。 false "的情况下渲染整个布局,包括" "标签中的所有脚本。 在控制器动作中添加`render layout: false "到控制器动作中,解决了这个问题。