jquery-ajax中的async:false和async:true之间有什么区别



在jquery ajax中有一个参数

$.ajax({async: true, ...});

将值设置为truefalse有什么区别?

当您需要在浏览器传递到其他代码之前完成ajax请求时,您将async设置为false

<script>
    // ...
    $.ajax(... async: false ...); // Hey browser! first complete this request, 
                                  // then go for other codes
    $.ajax(...); // Executed after the completion of the previous async:false request.
</script>

By default, the$.ajax request in jQuery is set to asynchronous。变量名为async,值设置为true。当我第一次了解它的时候,这也让我有点困惑,所以让我们复习一下

同步(async:false)–脚本停止并等待服务器发回回复,然后再继续。在某些情况下,同步Ajax是强制性的。

在标准Web应用程序中,客户和服务器之间的交互是同步的。这意味着一个必须发生在另一个之后。如果客户单击链接,则会将请求发送到服务器,然后服务器会将结果发回。

由于请求丢失和挂起浏览器的危险,不建议将同步javascript用于(onbefore)卸载事件处理程序之外的任何操作,但如果在允许用户离开页面之前需要听取服务器的反馈,则同步javascript不仅仅是您的最佳选择。

$.ajax({
         url: "file.php",
         type: "POST",
         async: false,
         success: function(data) {
                // .....
         }
      });

异步(async:true)–脚本允许页面继续处理,并在到达时处理回复。如果文件的请求和/或传输出现任何问题,您的程序仍然能够识别问题并从中恢复。异步处理避免了从服务器检索时的延迟,因为访问者可以继续与网页交互,并且请求的信息将在响应到达时进行处理,并更新页面。

$.ajax({
         url: "file.php",
         type: "POST",
         async: true,
         success: function(data) {
                    // .....
         }
       });

也看看这篇文章

异步和同步AJAX调用

将其设置为false会阻塞主线程(负责执行JavaScript、渲染屏幕等)并等待XHR完成。

这几乎总是一个糟糕的想法。用户不喜欢无响应的UI。

异步(默认值:true

类型:布尔

默认情况下,所有请求都是异步发送的(即,默认情况下设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType: "jsonp"请求不支持同步操作。请注意,同步请求可能会暂时锁定浏览器,从而在请求处于活动状态时禁用任何操作从jQuery 1.8开始,不赞成将async: false与jqXHR($.Deferred)一起使用;您必须使用success/error/complete回调选项,而不是使用jqXHR对象的相应方法,如jqXHR.done()

这是来源。

最新更新