什么是&;async: false&;jQuery.ajax()?

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

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

671267 次浏览

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

这是否与 阻止页面上的其他事件 从发射?< / p >

是的。

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

欲了解更多信息,请参见: jQuery ajax成功匿名函数作用域 < / p >

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

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

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

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

工作人员之外的同步XMLHttpRequest正在从web平台上删除,因为它对最终用户的体验有不利影响。(这是一个漫长的过程,需要很多年。)当JavaScript全局环境是文档环境时,开发人员不能为async参数传递false。强烈鼓励用户代理在开发人员工具中警告此类使用,并可以尝试在发生此类情况时抛出InvalidAccessError异常。 未来的方向是只允许工作线程中的xmlhttprequest。

.

.

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

上面的例子清楚地解释了异步:假的用法

通过将其设置为false,我们已经确保一旦从url < em > < / em >检索到数据,仅在调用< em >返回php_data; < / em >之后