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

kas*_*lli 4 javascript ajax jquery asynchronous

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

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

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

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

nan*_*doj 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
});
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,我必须使用`async:false`。否则,脚本将执行后续代码,而无需等待检查打印机中是否有任何挂起的打印作业的任务。我必须等待请求完成。我希望有一种方法可以做到这一点,同时跳过弃用警告。 (2认同)

Fel*_*ing 3

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

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

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

您应该听取建议并对您的应用程序进行适当的更改(是的,这并不像更改为 那样简单async: falseasync: true

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