具体来说,它与默认值(async: true)有什么不同?

在什么情况下,我想显式设置async为false,它是否与防止页面上的其他事件发射有关?


当前回答

async:false =代码暂停。(等待完成的其他代码。) async:true =代码继续。(没有任何东西被暂停。其他代码没有等待。)

就这么简单。

其他回答

将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;
})();

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

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

Async:False将保留其余代码的执行。一旦你得到ajax的响应,只有这样,其余的代码才会执行。

如果禁用异步检索,脚本将阻塞,直到请求完成为止。它对于以已知顺序执行某些请求序列很有用,不过我发现异步回调更简洁。

这有什么关系吗 阻止页面上的其他事件 从发射?

Yes.

将async设置为false意味着在调用函数中的下一个语句之前必须完成所调用的语句。如果你设置async: true,那么该语句将开始执行,无论async语句是否已经完成,下一个语句将被调用。

欲了解更多信息,请参阅: jQuery ajax成功匿名函数作用域

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

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