Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery ajax async:false会导致奇怪的警告吗?_Javascript_Jquery_Ajax_Asynchronous - Fatal编程技术网

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

Javascript jQuery ajax async:false会导致奇怪的警告吗?,javascript,jquery,ajax,asynchronous,Javascript,Jquery,Ajax,Asynchronous,在我的JS应用程序中,我有许多Ajax调用async:false。我正在使用最新的Chrome浏览器,在我的控制台中最近出现了以下警告 主线程上的同步XMLHttpRequest已被弃用,因为 它会对最终用户的体验产生不利影响。要获得更多帮助, 检查 现在我尝试将所有async:false更改为async:true。但它会导致很多错误,因为我的应用程序需要使用async:false运行 警告只是一个bug还是什么?我可以担心还是忽略这一点?它告诉您,如果服务器关闭,您将面临锁定浏览器的风险 设置

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

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

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


警告只是一个bug还是什么?我可以担心还是忽略这一点?

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

设置一个带有取消按钮的模式对话框,并异步调用函数

警告只是一个bug还是什么

不,这不是虫子。出于消息中所述的原因,同步请求确实被弃用

我可以担心还是忽略这一点

你应该听从建议,对你的应用程序进行适当的更改(是的,这并不像将
async:false
更改为
async:true
那么简单)

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


此消息告诉您,
async:false
会创建糟糕的用户体验。这是因为它会在ajax调用期间锁定浏览器。这不是一个bug,而是一条提示信息,说明您正在做一些您可能不应该做的事情

我很少看到合法需要
async:false
,但是使用
async:true
编程(为了创建更好的用户体验)需要编写与异步操作配合使用的代码。这是一件你必须学会如何去做的事情,但一旦学会了,它是非常可行的

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


如果您想了解如何开始使用异步ajax编码,那么我建议您阅读这个问题及其各种答案:

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

在web应用程序的UX设计中,这被认为是一个糟糕的做法,主要浏览器都不赞成使用此功能,而支持使用回调的异步请求

您现在不必担心这条消息。这不是一个bug,但我强烈建议您开始重写它,因为当一个功能被标记为不推荐使用时,这意味着警告他们可以在将来的任何时候删除该功能

jQuery 1.8+中也不推荐使用它

从jQuery1.8开始,在jqXHR($.Deferred)中使用async:false是不正确的 不赞成;您必须使用成功/错误/完成回调选项 而不是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
});
警告只是一个bug还是什么

警告本身不是一个bug。它警告您代码中可能有bug。您的代码使用的功能已被弃用,这意味着它将按照您的预期工作的保证越来越少。警告很简单,嗯,警告你这件事

我可以担心还是忽略这一点

忽视警告通常是个坏主意。当它们最终变成错误时,停机时间只能怪你自己

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

你把因果关系搞混了
async:true
不会导致错误,代码是。这些错误应该纠正,而不是回避。通过使用
async:false
规避错误只会将修复延迟到以后。此警告告诉您“稍后”即将到来,并建议您在问题恶化之前解决问题


如果您的应用程序“需要使用
async:false运行”,则表明您的应用程序设计不正确。警告是建议您修复它。其他人也在这里。

这不是一个bug。这是一条信息性消息,告诉您sync XMLHTTPRequests已被弃用(即不应再使用)及其原因。你应该转换你的应用程序,使其能够处理异步请求(是的,这并不像将
false
更改为'true'那么简单)。我不明白您希望得到什么样的答案?使用
async:false
一直是一种不好的做法,因为警告中提到的原因在我的情况下,我必须使用
async:false
。否则,脚本将执行后续代码,而不等待检查打印机中是否存在任何挂起的打印作业的任务。我必须等待请求完成。我希望有办法做到这一点,同时跳过弃用警告。