我一直在向控制台添加日志,以检查不同变量的状态,而不使用Firefox调试器。
然而,在许多地方,当我在main.js
文件中添加console.log
时,我收到以下错误,而不是我对自己的可爱的小手写信息。
主线程上的同步XMLHttpRequest已被废弃,因为它对终端用户的体验有不利影响'。如需更多帮助,http://xhr.spec.whatwg.org/
我可以在我的代码中加入什么替代或包装console.log
的东西,而不会引起这个错误?
我是不是做错了?
这发生在我身上,当时我很懒,把一个脚本标签作为返回内容的一部分。就像这样。
部分HTML内容。
<div>
SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script>
看起来,至少在我的例子中,如果你通过xhr返回这样的HTML内容,你会导致jQuery进行调用以获得该脚本。这个调用发生在一个异步标志为假的情况下,因为它假设你需要脚本继续加载。
在这样的情况下,你最好研究一下某种绑定框架,然后直接返回一个JSON对象,或者根据你的后台和模板,你可以改变你的脚本加载方式。
你也可以使用[jQuery'的getScript()
](http://api.jquery.com/jQuery.getScript/)来抓取相关的脚本。这里有一个小插曲,它只是一个jQuery例子的直接拷贝,但我没有看到在以这种方式加载脚本时出现任何警告。
**例子 ***
<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>
[
][1]该警告信息可能是由于主线程内的XMLHttpRequest请求,其异步标志设置为false。
https://xhr.spec.whatwg.org/#synchronous-flag。
在工作者之外的同步XMLHttpRequest正在被 被从网络平台中删除,因为它对最终用户有不利的影响。 终端用户的体验。(这是一个漫长的过程,需要很多 年)。开发人员不能为async参数传递false,当 JavaScript全局环境是一个文档环境。用户代理 强烈建议在开发者工具中对这种用法提出警告 并可以尝试在发生时抛出一个InvalidAccessError异常。 它的发生。
未来的方向是只允许在工作线程中进行XMLHttpRequests。该消息的目的是为此发出一个警告。
有时候需要ajax加载一个脚本,但要把*文档准备好的时间延迟到脚本加载之后。
jQuery使用holdReady()
函数来支持这个功能。
使用示例:
$.holdReady(true); //set hold
function releaseHold() { $.holdReady(false); } //callback to release hold
$.getScript('script.js', releaseHold); //load script then release hold
实际的脚本加载是异步的(没有错误),但如果你的JavaScript的其余部分在文档准备好后运行,效果是同步的。
>.这个高级的功能通常会被动态脚本使用。 这个高级的功能通常会被动态脚本使用。
加载器要加载额外的JavaScript,如jQuery插件。
在允许就绪事件发生之前,即使DOM可能是 准备好了。
文件:
https://api.jquery.com/jquery.holdready
<br>。
来自JQMIGRATE。
jQuery.holdReady()已被弃用。 >.>原因:
jQuery.hold住Ready()
方法已被废弃,因为它对页面的全局性能有不利影响。 原因:由于jQuery.holdReady()
方法对页面的全局性能有不利影响,因此已经被废弃。 这个方法可以防止页面上的所有代码在长时间内初始化。解决方案:重写页面,使其不需要所有jQuery ready处理程序被延迟。 例如,可以通过在安全运行时只延迟加载需要延迟的代码来实现。 由于这种方法的复杂性,jQuery Migrate并不试图填充功能。 如果底层版本的jQuery Migrate使用的jQuery不再包含
jQuery.holdReady()
代码会在这个警告出现后不久失败。
@Webgr的部分回答其实帮我调试了这个警告@控制台日志,可惜该回答的另一部分带来了这么多的降权:(
总之,下面是我如何找到我的案例中这个警告的原因。
打开抽屉菜单(在Chrome浏览器中右上角的3个竖点)。
在Console > 勾选记录XMLHttpRequests选项。
重新加载给你带来错误的页面,并在控制台日志中观察每次ajax请求时发生的情况。
在我的案例中,另一个插件在每次ajax调用后加载了2个.js库,这绝对不是必需的,也不是必须的。 禁用该流氓插件后,日志中的警告就被删除了。 从这一点来说,你可以尝试自己解决这个问题(例如:将脚本的加载限制在一个新的水平。 限制脚本加载到特定的页面或事件 - 这是太具体了,在这里回答)或联系第三方插件开发人员来解决这个问题。
希望能帮到别人。
在以下情况下,我收到这样的警告。
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 "继续存在。
所以不需要再次加载它。
在我这里就解决了。
JS
$.ajaxPrefilter(function( options, original_Options, jqXHR ) {
options.async = true;
});
这个答案是在这个链接中插入的
[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(我在寻找解决办法时访问了这两个主题)。