Javascript 同步XMLHttpRequest弃用警告解决方案的可行性

Javascript 同步XMLHttpRequest弃用警告解决方案的可行性,javascript,jquery,ajax,Javascript,Jquery,Ajax,这个问题在很多论坛上都有报道,包括这一个,我发现了一个明显独特的解决方案,尽管我不确定它是否明智。它确实有效,但可能是一些更接近JQuery开发的人或其成员能够权威地回答的问题 我和许多其他人遇到的问题是控制台错误消息,其中包含以下文本: 主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查 在我和许多其他人的例子中,它引用jquery.js文件,特别是这一行 xhr.open( options.type, options.url,

这个问题在很多论坛上都有报道,包括这一个,我发现了一个明显独特的解决方案,尽管我不确定它是否明智。它确实有效,但可能是一些更接近JQuery开发的人或其成员能够权威地回答的问题

我和许多其他人遇到的问题是控制台错误消息,其中包含以下文本:

主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查

在我和许多其他人的例子中,它引用jquery.js文件,特别是这一行

xhr.open( options.type, options.url, options.async; options.username, options.password );
各国的相关信息:

当 JavaScript全局环境是一个文档环境

我有许多由其他人编写的使用JQuery的复杂的、缩小的例程,我并不擅长在这些例程中找出哪里会产生错误

然后,我想到用jquery.js文件中的
true
替换
options.async
,如下所示:

xhr.open( options.type, options.url, true, options.username, options.password );
瞧!在控制台报告错误的每个浏览器上,问题都消失了。(在缩小的JQuery.min.js文件中查找和编辑相关代码是一件轻而易举的事;在依赖JQuery的所有其他例程中查找相关代码即使不是稍微不可能,也是一件乏味的事情。)


但我的问题是:这显然是一种不明智的解决方案吗?我的站点确实有效,使用JQuery的例程都没有问题。非常感谢评论。

问题在于JQUERY本身的可分发性

问题的原因是当前版本2.1.4中的jquery.js文件。尽管将
options.async
记录为一个不推荐使用的参数,该参数只应传递值
true
,但jquery.js文件本身使用文件中前面定义的数据调用xhr.open文件,参数设置为
false
。这是jquery.js文件中有问题的例程:

jQuery._evalUrl = function( url ) {
    return jQuery.ajax({
        url: url,
        type: "GET",
        dataType: "script",
        async: false,
        global: false,
        "throws": true
    });
};
async
设置为
true
时,问题消失,不再需要我以前使用的黑客解决方案


现在,说真的,这是一个真正的JQuery专家应该评论的问题。为什么JQuery初始化文件会违反它建议用户遵循的使用标准?

这是一种黑客行为,因为它会破坏依赖于同步进行AJAX调用的代码(没有人应该这样做,因为这是一种非常糟糕的做法)。如果你对网站上的代码拥有100%的控制权,那么我会说你可以侥幸逃脱,但要注意,在某些情况下,这可能会导致奇怪的行为。如果您依赖于使用
async:false
的代码,我建议您解雇最初编写代码的开发人员,然后重新编写。看起来您只是在开玩笑,让自己面临未来的麻烦。。。在你的IDE中使用
find/replace
,如果你没有一个,那么他们有很多免费的可以做到这一点的“有很多复杂的、由其他人使用JQuery编写的小型例程,而我并不擅长在这些例程中找出哪里会产生错误”使用
$.ajaxSetup()
要定义在发送前检查
函数,
if(settings.options.async==“false”){debugger}
?@RoryMcCrossan如果您阅读了规范,传递
false
过去是该函数支持的,但现在它被认为是不推荐的,将被淘汰,因此会发出严格的警告消息。任何人都不应该被解雇@charlietfl它比简单的搜索和替换更复杂,因为此函数是从另一个函数中调用的,等等@guest271314感谢您的调试技术建议…我将使用它。奇怪的是,当我在Bitnami Wamp和Php7 RC6中运行代码时,这个错误第一次出现在我的控制台中……在XAMPP和Php5中运行时不是这样。6@Tom别担心,这是一个轻松的评论
async:false始终是一个完全合法的做法,但在实践中很糟糕-类似于
eval()
。。。对stackoverflow大喊大叫不会让你有任何进展。或者用jQuery core.IIRC提交一个bug,他们在编写HTML时会
evalUrl
,并希望对其中的脚本进行同步评估。@espascarello除非你在自己的初始化文件中发现它是一个bug,否则这不是对jQuery的攻击;对于在这里和其他地方报告这个问题的无数其他人,我通过这篇文章提供了一个解决方案。(我现在在JQuery错误列表中报告它。)