JavaScript console.log导致错误:"主线程上的同步XMLHttpRequest被废弃了...&quot。

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

然而,在许多地方,当我在main.js文件中添加console.log时,我收到以下错误,而不是我对自己的可爱的小手写信息。

主线程上的同步XMLHttpRequest已被废弃,因为它对终端用户的体验有不利影响'。如需更多帮助,http://xhr.spec.whatwg.org/

我可以在我的代码中加入什么替代或包装console.log的东西,而不会引起这个错误?

我是不是做错了?

对该问题的评论 (7)

这发生在我身上,当时我很懒,把一个脚本标签作为返回内容的一部分。就像这样。

部分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>

[http://jsfiddle.net/49tkL0qd/][1]

评论(11)

该警告信息可能是由于主线程内的XMLHttpRequest请求,其异步标志设置为false。

https://xhr.spec.whatwg.org/#synchronous-flag

在工作者之外的同步XMLHttpRequest正在被 被从网络平台中删除,因为它对最终用户有不利的影响。 终端用户的体验。(这是一个漫长的过程,需要很多 年)。开发人员不能为async参数传递false,当 JavaScript全局环境是一个文档环境。用户代理 强烈建议在开发者工具中对这种用法提出警告 并可以尝试在发生时抛出一个InvalidAccessError异常。 它的发生。

未来的方向是只允许在工作线程中进行XMLHttpRequests。该消息的目的是为此发出一个警告。

评论(3)

我也面临着同样的问题,但通过将async: true的方式来解决它。我知道它默认为 "真",但当我明确地写下它时,它就会工作。

$.ajax({
   async: true,   // this will solve the problem
   type: "POST",
   url: "/Page/Method",
   contentType: "application/json",
   data: JSON.stringify({ ParameterName: paramValue }),
});
评论(3)

Visual Studio 2015/2017'的实时调试器正在注入包含废弃调用的代码。

评论(3)

有时候需要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的其余部分在文档准备好后运行,效果是同步的。

&gt.这个高级的功能通常会被动态脚本使用。 这个高级的功能通常会被动态脚本使用。

加载器要加载额外的JavaScript,如jQuery插件。

在允许就绪事件发生之前,即使DOM可能是 准备好了。

文件:
https://api.jquery.com/jquery.holdready
<br&gt。


更新 2019年1月7日

来自JQMIGRATE

jQuery.holdReady()已被弃用。 &gt.>原因: jQuery.hold住Ready()方法已被废弃,因为它对页面的全局性能有不利影响。 原因:由于jQuery.holdReady()方法对页面的全局性能有不利影响,因此已经被废弃。 这个方法可以防止页面上的所有代码在长时间内初始化。

解决方案:重写页面,使其不需要所有jQuery ready处理程序被延迟。 例如,可以通过在安全运行时只延迟加载需要延迟的代码来实现。 由于这种方法的复杂性,jQuery Migrate并不试图填充功能。 如果底层版本的jQuery Migrate使用的jQuery不再包含jQuery.holdReady()代码会在这个警告出现后不久失败。

评论(0)

为了避免这个警告,请不要使用。

async: false

中的任何$.ajax()调用。 这是XMLHttpRequest中唯一被废弃的功能。

默认的是

async: true

https://stackoverflow.com/questions/27736186/jquery-has-deprecated-synchronous-xmlhttprequest/27736383#27736383

评论(0)

@Webgr的部分回答其实帮我调试了这个警告@控制台日志,可惜该回答的另一部分带来了这么多的降权:(

总之,下面是我如何找到我的案例中这个警告的原因。

  1. 使用Chrome浏览器&gt。 点击F12带来DevTools
  2. 打开抽屉菜单(在Chrome浏览器中右上角的3个竖点)。

  3. Console > 勾选记录XMLHttpRequests选项。

  4. 重新加载给你带来错误的页面,并在控制台日志中观察每次ajax请求时发生的情况。

在我的案例中,另一个插件在每次ajax调用后加载了2个.js库,这绝对不是必需的,也不是必须的。 禁用该流氓插件后,日志中的警告就被删除了。 从这一点来说,你可以尝试自己解决这个问题(例如:将脚本的加载限制在一个新的水平。 限制脚本加载到特定的页面或事件 - 这是太具体了,在这里回答)或联系第三方插件开发人员来解决这个问题。

希望能帮到别人。

评论(4)

我一直在看答案都令人印象深刻。 我认为他应该提供的代码,是给他一个问题。 鉴于下面的例子,如果你有一个脚本在page.php中链接到jquery,那么你会得到这个通知。

$().ready(function () {
    $.ajax({url: "page.php",
        type: 'GET',
        success: function (result) {
        $("#page").html(result);
   }});
 });
评论(0)

在以下情况下,我收到这样的警告。

  1. file1中包含<script type="text/javascript&quot.src="/javascript/jquery-1.10.2.js"></script>; src="/javascript/jquery-1.10.2.js"></script>`。 页面有输入栏。 我在输入栏中输入一些值,然后点击按钮。 Jquery将输入发送到外部php文件。

  2. 外部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 "继续存在。 所以不需要再次加载它。

评论(0)

在一个MVC应用程序中,我得到了这个警告,因为我打开Kendo窗口的方法是返回一个View(),而不是PartialView()。 View()试图再次检索页面的所有脚本。

评论(0)

我在ZF2中也发生过这种情况。 我试图加载Modal内容,但我忘记了之前禁用布局。

于是。

$viewModel = new ViewModel();
$viewModel->setTerminal(true);
return $viewModel;
评论(0)

和@Nycen一样,我也是因为链接到Cloudfare而出现这个错误。 我的是Select2插件.

为了解决这个问题,我只是删除了

 src="//cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"

而错误也随之消失。

评论(0)

当我把一个 can.js 脚本包含在另一个 can.js 脚本中时,我得到了这样的异常,比如说

{{>anotherScript}}
评论(1)

当我在查询中设置"example.com/files/text.txt"这样的url时,出现了这个异常。 我把url改为"http://example.com/files/text.txt&quot。 然后这个异常就消失了。

评论(1)

在我这里就解决了。

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

评论(0)

在我的案例中,这是由于flexie脚本引起的,该脚本是"CDNJS Selections&quot.应用程序的一部分,由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(我在寻找解决办法时访问了这两个主题)。

评论(0)
  1. 在Chrome浏览器中,按F12
  2. 开发工具-> 按F1

  3. 见设置->一般->外观。 "Don&#39;不显示chrome Data Saver警告"-设置这个复选框。

  4. 见设置->一般->控制台。 "记录XMLHTTPRequest"-也设置这个复选框。

欣赏

评论(0)

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

评论(0)

我通过以下步骤解决了这个问题。

  1. 检查你的CDN脚本,并将它们添加到本地。
  2. 将你的脚本包含到头部分。
评论(0)

在我的特殊情况下,我在渲染一个Rails局部时没有使用render layout.false,这就会重新渲染整个布局,包括<head>标签中的所有脚本。 false "的情况下渲染整个布局,包括" "标签中的所有脚本。 在控制器动作中添加`render layout: false "到控制器动作中,解决了这个问题。

评论(0)