我一直在向控制台添加日志,以检查不同变量的状态,而不使用Firefox调试器。

然而,在我在main.js文件中添加console.log的许多地方,我收到了以下错误,而不是我给自己的可爱的手写消息:

主线程上的同步XMLHttpRequest已弃用,因为它会对最终用户的体验产生不利影响。更多帮助http://xhr.spec.whatwg.org/

我可以在我的代码使用中添加哪些不会导致此错误的console.log替代品或包装器?

我“做错了”吗?


当前回答

@ webgr部分回答实际上帮助我调试了这个警告@控制台日志,遗憾的是,答案的另一部分带来了这么多的反对票:(

不管怎样,下面是我发现这个警告的原因:

使用Chrome浏览器>按F12打开DevTools 打开抽屉菜单(在Chrome 3中右上角的垂直点) 在控制台>下检查Log XMLHttpRequests选项 重新加载给您错误的页面,并观察控制台日志中的每个ajax请求发生了什么。

在我的例子中,另一个插件在每次ajax调用后加载2个.js库,这是绝对不需要也没有必要的。禁用流氓插件从日志中删除了警告。从这一点上,你可以尝试自己解决这个问题(例如,限制脚本的加载到某些页面或事件-这是一个太具体的答案)或联系第三方插件开发人员来解决它。

希望这能帮助到一些人。

其他回答

警告消息可能是由于主线程中的XMLHttpRequest请求将async标志设置为false。

https://xhr.spec.whatwg.org/ synchronous:

Synchronous XMLHttpRequest outside of workers is in the process of being removed from the web platform as it has detrimental effects to the end user's experience. (This is a long process that takes many years.) Developers must not pass false for the async argument when the JavaScript global environment is a document environment. User agents are strongly encouraged to warn about such usage in developer tools and may experiment with throwing an InvalidAccessError exception when it occurs.

未来的方向是只允许工作线程中的xmlhttprequest。这条消息意在发出这方面的警告。

这种情况发生在我很懒的时候,我将脚本标记作为返回内容的一部分。是这样的:

部分HTML内容:

<div> 
 SOME CONTENT HERE
</div>
<script src="/scripts/script.js"></script> 

至少在我的例子中,如果通过xhr返回这样的HTML内容,就会导致jQuery调用该脚本。该调用带有一个async标志false,因为它假定您需要继续加载脚本。

在这种情况下,最好查看某种类型的绑定框架并返回一个JSON对象,或者根据后端和模板更改加载脚本的方式。

你也可以使用jQuery的getScript()来获取相关的脚本。这是一个小提琴,这只是一个直接复制的jQuery示例,但我没有看到任何警告抛出时,脚本加载的方式。

例子

<script>
var url = "/scripts/script.js";
$.getScript(url);
</script>

http://jsfiddle.net/49tkL0qd/

在我的情况下,这是由Cloudflare提供的“CDNJS选择”应用程序中的灵活脚本引起的。

根据Cloudflare的说法,“该应用程序已于2015年3月弃用”。我把手机关掉,留言立刻就消失了。

您可以通过访问https://www.cloudflare.com/a/cloudflare-apps/yourdomain.com访问这些应用程序

注意:这是我在这个线程上的答案的副本同步XMLHttpRequest警告和<脚本>(我在寻找解决方案时访问了这两个)

对我来说,问题是在OK请求中,我期望ajax响应是一个格式良好的HTML字符串,如表格,但在这种情况下,服务器在请求中遇到了问题,重定向到错误页面,因此返回错误页面的HTML代码(在某处有一个<script标记)。我控制台记录了ajax响应,这时我意识到它不是我所期望的,然后继续进行调试。

我得到了这个例外,包括一个can.js脚本在另一个,例如,

{{>anotherScript}}