jQuery已弃用同步XMLHTTPRequest

Edd*_*Edd 115 javascript ajax jquery xmlhttprequest

像许多其他人一样,我的网站正在使用jQuery.当我打开开发人员工具时,我看到一条警告说XMLHTTPRequest是

由于其对最终用户体验的不利影响而被弃用.

我继续阅读部分文档,但这是相当技术性的.有人可以用简单的术语解释从XMLHTTPRequest转换为WHATWG的后果吗?它说它发生在2012年.

此外,文档说工作人员之外的同步XMLHttpRequest正在从Web平台中删除,当发生这种情况时,如果用户代理在服务中拥有它们,他们是否需要修改现有代码?

Bar*_*mar 133

要避免此警告,请不要使用:

async: false
Run Code Online (Sandbox Code Playgroud)

在你的任何$.ajax()电话中.这是被XMLHttpRequest弃用的唯一功能.

默认是async: true,所以如果你根本不使用这个选项,你的代码应该是安全的,如果该功能真的被删除(它可能不会 - 它可能会从标准中删除,但我敢打赌浏览器将继续支持它多年).

  • 这是jQuery的警告.我可以忽略它吗?我不使用同步调用服务器.我的完美主义者一面都不喜欢发出警告. (9认同)
  • @Jordan我认为警告来自浏览器,而不是jQuery。每当您尝试使用同步AJAX时,它就会发生。如果使用jQuery,则只有在$ .ajax中指定该选项时才会发生。 (2认同)
  • 我正在使用`jquery.i18n.properties.js`但是我的身边没有明确的调用`$ .ajax.也许在内部,但不确定. (2认同)

Sam*_*Sam 62

接受的答案是正确的,但如果您使用Visual Studio 2013或更高版本在ASP.NET下进行开发,并且确定您没有发出任何同步的ajax请求或在错误的位置定义任何脚本,我发现了另一个原因.

解决方案是通过取消选中VS工具栏下拉列表中的"启用浏览器链接"来禁用"浏览器链接"功能,该下拉列表由顺时针指向的小刷新图标指示.一旦你这样做并重新加载页面,警告应该停止!

禁用浏览器链接

这应该只在本地调试时发生,但是知道警告的原因仍然很好.

  • 我认为这是一个不好的建议只是为了在控制台中获取警告消息.禁用browserlink并摆脱browserlink添加的生产力增强功能,这样您就不会在浏览器控制台中看到警告消息?更好地提交微软的错误,它得到修复. (3认同)
  • @ coding4fun感谢您的意见; 您可以随时向Microsoft提交错误.我不是说你应该禁用浏览器链接.在某些情况下,我的答案对于此警告的原因是准确的,并且在您自己的代码中排除某些内容很有用.一旦我意识到这不是我做错了,并且认为其他人也可能觉得它有用,我个人感觉更好. (3认同)

小智 15

这发生在我身上,因为在身体部分结束之前,在头部外面有一个外部js的链接.你知道,其中一个:

<script src="http://somesite.net/js/somefile.js">

它与JQuery没有任何关系.

你可能会看到同样的事情:

var script = $("<script></script>");
script.attr("src", basepath + "someotherfile.js");
$(document.body).append(script);
Run Code Online (Sandbox Code Playgroud)

但我没有测试过这个想法.


Hug*_*ing 6

@ henri-chan曾将其作为评论提到,但我认为它值得更多关注:

当您使用jQuery / javascript用新的html更新元素的内容,并且此新的html包含<script>标签时,这些标签将同步执行,从而触发此错误。样式表也是如此。

您知道XHR在控制台窗口中看到正在加载的(多个)脚本或样式表时,这种情况正在发生。(Firefox)。