jQuery已弃用同步XMLHTTPRequest

时间:2015-01-02 00:53:03

标签: javascript jquery ajax xmlhttprequest

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

  

因其对最终用户体验的不利影响而被弃用。

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

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

7 个答案:

答案 0 :(得分:130)

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

async: false
在您的$.ajax()个来电中

。这是XMLHttpRequest唯一被弃用的功能。

默认值为async: true,因此,如果您根本不使用此选项,那么如果真正删除该功能,您的代码应该是安全的(可能不会 - 它可能会从标准中删除,但我敢打赌浏览器将继续支持它多年。)

答案 1 :(得分:62)

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

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

Disable Browser Link

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

答案 2 :(得分:14)

通过在身体部分结束之前在头部外部连接外部js,我发生了这种情况。你知道,其中一个:

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

它与JQuery没有任何关系。

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

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

但我还没有测试过这个想法。

答案 3 :(得分:3)

之前的答案中没有一个(一切都是正确的)适合我的情况:我没有使用async中的jQuery.ajax()参数而我没有包含脚本标记作为返回内容的一部分,如:

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

我的情况是我连续调用两个AJAX请求,目的是同时更新两个div:

function f1() {
     $.ajax(...); // XMLHTTP request to url_1 and append result to div_1
}

function f2() {
     $.ajax(...); // XMLHTTP request to url_2 and append result to div_2
}

function anchor_f1(){
$('a.anchor1').click(function(){
     f1();
})
}

function anchor_f2(){
$('a.anchor2').click(function(){
     f2();
});
}

// the listener of anchor 3 the source of problem
function anchor_problem(){
$('a.anchor3').click(function(){
     f1();
     f2();
});
}

anchor_f1();
anchor_f2();
anchor_problem();

当我点击a.anchor3时,它会引发警告标志。我通过替换click()函数调用f2来解决问题:

function anchor_problem(){
$('a.anchor_problem').click(function(){
     f1();
     $('a.anchor_f2').click();
});
}

答案 4 :(得分:3)

It was mentioned as a comment by @henri-chan, but I think it deserves some more attention:

When you update the content of an element with new html using jQuery/javascript, and this new html contains <script> tags, those are executed synchronously and thus triggering this error. Same goes for stylesheets.

You know this is happening when you see (multiple) scripts or stylesheets being loaded as XHR in the console window. (firefox).

答案 5 :(得分:1)

我的工作:我使用异步请求将代码转储到缓冲区。我每秒都有一个循环检查缓冲区。当转储到达缓冲区时,我执行代码。我也使用超时。 对于最终用户,页面的工作方式就像使用同步请求一样。

答案 6 :(得分:0)

如果我们在局部视图中加载脚本,那么此问题就会出现

  1. 我在局部视图中删除了脚本,然后移到了主视图。

此解决方案对我来说很好

相关问题