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

时间:2015-02-23 18:36:49

标签: javascript jquery ajax asynchronous

在我的JS App中,我与async: false进行了很多Ajax调用。我正在使用最新的Chrome浏览器,并在我的控制台下面出现警告。

  

主线程上的同步XMLHttpRequest因不推荐使用   它对最终用户的体验产生不利影响。如需更多帮助,   检查http://xhr.spec.whatwg.org/

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

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

5 个答案:

答案 0 :(得分:5)

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

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

  

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

它也从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
});

答案 1 :(得分:3)

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

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

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

如果你想了解如何开始使用异步ajax进行编码,那么我建议你阅读这个问题,这是各种答案:How do I return the response from an asynchronous call?

答案 2 :(得分:2)

  

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

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

  

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

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

这可能有助于更好地理解异步操作:

答案 3 :(得分:2)

  

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

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

  

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

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

  

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

运行

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

如果您的应用需要与async: false"然后你的应用程序设计不正确。警告提示您修复它。其他人也是如此。

答案 4 :(得分:1)

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

使用取消按钮设置模态对话框并异步调用该函数。