在jquery ajax中async:false和async:true有什么区别?

时间:2013-11-26 05:19:07

标签: jquery ajax asynchronous

在jquery ajax中有一个参数

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

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

3 个答案:

答案 0 :(得分:72)

如果您需要在浏览器传递到其他代码之前完成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应用程序中,客户与服务器之间的交互是同步的。这意味着必须在另一个之后发生。如果客户单击链接,则会将请求发送到服务器,然后服务器将结果发回。

由于请求丢失和挂起浏览器的危险,建议不要在(onbefore)卸载事件处理程序之外的任何内容使用同步javascript,但是如果您需要在允许用户之前从服务器回听要离开页面,同步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) {
                    // .....
         }
       });

另外看一下这篇文章

<强> Asynchronous and Synchronous AJAX calls

答案 1 :(得分:6)

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

这几乎总是一个糟糕的主意。用户不喜欢没有响应的用户界面。

答案 2 :(得分:1)

异步(默认:true

类型:布尔值

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

这里是Source