jQuery ajax async:false会导致奇怪的警告吗?

在我的JS应用程序中,我使用async: false进行了许多Ajax调用。 我正在使用最新的Chrome浏览器,并在我的控制台下方警告最近出现。

主线程上的同步XMLHttpRequest由于其对最终用户体验的不利影响而被弃用。 如需更多帮助,请访问http://xhr.spec.whatwg.org/ 。

现在我想尝试将所有async: false更改为async: true 。 但它会导致很多错误,因为我的应用程序需要使用async: false运行。

警告只是一个错误或什么? 我可以担心或忽略这一点吗?

警告只是一个错误或什么?

不,这不是一个错误。 由于消息中声明的原因,确实已弃用同步请求。

我可以担心或忽略这一点吗?

您应该注意这些建议并对您的应用程序进行适当的更改(是的,它不像只更改async: falseasync: true那么简单)。

也许这有助于更好地理解异步操作:

  • 为什么我的变量在函数内部修改后没有变化? – 异步代码引用
  • 如何从异步调用返回响应?

JavaScript仅在UI线程上运行,因此同步AJAX调用将完全冻结浏览器,直到服务器回复。

它被认为是用于Web应用程序的UX设计中的一个不好的实践,主要浏览器不赞成使用回调的异步请求。

你现在可能不担心这个消息。 这不是一个错误但我强烈建议你开始重写它,因为当一个function被标记为已弃用时,它意味着警告他们可以在将来的任何时候删除此function。

它也被jQuery 1.8+弃用了

从jQuery 1.8开始,不推荐使用async:false和jqXHR($ .Deferred); 您必须使用success / error / complete回调选项而不是jqXHR对象的相应方法,例如jqXHR.done()或不推荐使用的jqXHR.success()

推荐的方式:

 var request = $.ajax({ url: "script.php", data: { id : menuId }, dataType: "application/json" }); request.done(function(data) { // Executed in case of success }); request.fail(function( jqXHR, textStatus ) { // Executed in case of error }); 

此消息告诉您async: false会导致错误的用户体验。 这是因为它在ajax调用期间锁定了浏览器。 这不是一个错误,而是一条咨询消息,说明你正在做一些你应该做的事情。

我很少见过async: false的合法需求async: false ,但使用async: true编程(以创建更好的用户体验)需要编写适用于异步操作的代码。 这是你必须要学习如何做的事情,但是一旦学会了就非常可行。

您不能简单地将编写的代码同步运行并将标志更改为异步并期望同步代码能够正常工作。 相反,您必须更改代码以处理异步响应,并且您经常必须重新构造一些使用响应的代码在异步响应处理程序中。

如果你想了解如何使用异步ajax开始编码,那么我建议你阅读这个问题并且它有各种答案: 如何从异步调用中返回响应?

警告只是一个错误或什么?

警告本身不是一个错误。 它警告你,你的代码中可能存在错误。 代码使用的function已被弃用,这意味着它可以保证它能够按预期运行。 警告很简单,好警告你。

我可以担心或忽略这一点吗?

忽略警告通常是一个坏主意。 当他们最终成为错误时,你只能责怪自己的停机时间。

但它会导致很多错误,因为我的应用程序需要使用async: false运行

你在这里混淆了因果关系。 async: true不会导致错误,代码是。 应纠正这些错误,而不是规避。 使用async: false来绕过async: false只是将它们修复到以后。 此警告告诉您“稍后”即将到来,并建议您在问题变得更糟之前解决问题。

如果您的应用“需要使用async: false运行”,那么您的应用设计不正确。 警告提示您修复它。 其他人也在这里。

它告诉您,如果服务器关闭,您将面临锁定浏览器的风险。

使用取消按钮设置modal dialog并异步调用该函数。