jQuery.ajax()中"async:false"有什么作用?

Joe*_*e D 239 jquery

具体来说,它与default(async: true)有何不同?

在什么情况下我会想明确的设置asyncfalse,并且它有一些做以防止页面上的其他事件烧制而成?

Sea*_*ira 278

是否与阻止页面上的其他事件发生有关?

是.

将async设置为false意味着您调用的语句必须在函数中的下一个语句被调用之前完成.如果设置async:true,则该语句将开始执行,并且无论异步语句是否已完成,都将调用下一个语句.

有关更多见解请参阅: jQuery ajax成功匿名函数范围

  • 请记住,这也意味着浏览器不会捕获/触发执行ajax时发生的任何事件.我发现这很困难,试图弄清楚为什么Firefox没有触发点击事件.原来是因为"强制"模糊事件,后续同步调用阻止了它. (13认同)
  • 我一直想知道这是如何实现的,因为JavaScript没有线程化. (11认同)
  • 似乎`async:false`已经死了,我尝试了它并得到了18:17:49.384主线程上的同步XMLHttpRequest因其对最终用户体验的不利影响而被弃用.如需更多帮助,请访问http://xhr.spec.whatwg.org/ 1 jquery.js:9061:4` (5认同)
  • @ L.DeLeo - 不,完全没有 - 延迟是管理异步函数调用复杂性的另一种方法 - "async:false"*完全消除了调用中的异步*.对`ajax`**的调用阻止** - 在服务器响应之后,不执行它后面的代码. (4认同)
  • @Matt不是它(不再是^^)http://www.w3schools.com/html/html5_webworkers.asp (3认同)
  • `async: false` 从来都不是必需的,它是蹩脚的代码 - 如果你认为你需要它,那么你需要重新考虑你在做什么。您将获得通过将“async”设置为“false”来实现您希望实现的目标的方法 - 在请求完成之前不会发生任何事情......例如“成功”和“错误”。不要冻结人们的浏览器,这太恶心了。因此出现了“糟糕的用户体验”弃用警告。 (3认同)

夏期劇*_*期劇場 111

  • async:false=代码已暂停.(等待此完成的其他代码.)
  • async:true=代码继续.(没有任何内容被暂停.其他代码没有等待.)

就这么简单.

  • JavaScript是单线程的.什么都没有并行运行. (3认同)

小智 25

Async:False将执行休息代码.一旦得到ajax的响应,只有这样,其余的代码才会执行​​.


Joh*_*kin 18

如果禁用异步检索,则脚本将阻塞,直到请求完成为止.它以按已知顺序执行某些请求序列很有用,但我发现异步回调更清晰.


小智 9

一个用例是ajax在用户关闭窗口或离开页面之前进行呼叫.这就像删除数据库中的一些临时记录,然后用户可以导航到另一个站点或关闭浏览器.

 $(window).unload(
        function(){
            $.ajax({
            url: 'your url',
            global: false,
            type: 'POST',
            data: {},
            async: false, //blocks window close
            success: function() {}
        });
    });
Run Code Online (Sandbox Code Playgroud)

  • 没有多少JavaScript会阻止浏览器窗口关闭 (48认同)

i47*_*898 8

https://xhr.spec.whatwg.org/#synchronous-flag

工作人员之外的同步XMLHttpRequest正在从Web平台中删除,因为它对最终用户的体验有不利影响.(这是一个需要很多年的漫长过程.)当JavaScript全局环境是文档环境时,开发人员不得为async参数传递false.强烈建议用户代理在开发人员工具中警告这种用法,并尝试在发生时抛出InvalidAccessError异常.未来的方向是仅允许工作线程中的XMLHttpRequests.该消息旨在警告该效果.


小智 8

将async设置为false意味着ajax请求之后的指令必须等待请求完成.下面是一个必须将async设置为false的情况,以使代码正常工作.

var phpData = (function get_php_data() {
  var php_data;
  $.ajax({
    url: "http://somesite/v1/api/get_php_data",
    async: false, 
    //very important: else php_data will be returned even before we get Json from the url
    dataType: 'json',
    success: function (json) {
      php_data = json;
    }
  });
  return php_data;
})();
Run Code Online (Sandbox Code Playgroud)

上面的例子清楚地解释了async:false的用法

通过将其设置为false,我们确保一旦从url中检索数据,只有在返回php_data之后; 叫做