什么是;异步:false";在jQuery.ajax()中做什么?

什么是;异步:false";在jQuery.ajax()中做什么?,jquery,Jquery,具体来说,它与默认值(async:true)有何不同 在什么情况下,我希望显式地将async设置为false,这与防止触发页面上的其他事件有关吗 如果禁用异步检索,脚本将阻塞,直到请求完成。它对于以已知顺序执行某些请求序列很有用,尽管我发现异步回调更干净 这跟我有什么关系吗 阻止页面上的其他事件 不开枪 对 将async设置为false意味着在调用函数中的下一条语句之前,必须先完成正在调用的语句。如果设置async:true,则该语句将开始执行,并将调用下一条语句,而不管该async语句是否已完

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


在什么情况下,我希望显式地将
async
设置为
false
,这与防止触发页面上的其他事件有关吗

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

这跟我有什么关系吗 阻止页面上的其他事件 不开枪


将async设置为false意味着在调用函数中的下一条语句之前,必须先完成正在调用的语句。如果设置async:true,则该语句将开始执行,并将调用下一条语句,而不管该async语句是否已完成

有关详细信息,请参阅:

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

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

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

From

workers外部的同步XMLHttpRequest正在从web平台中删除,因为它对最终用户的体验有不利影响。(这是一个耗时多年的漫长过程。)当JavaScript全局环境是文档环境时,开发人员不得为异步参数传递false。强烈鼓励用户代理对开发人员工具中的此类使用发出警告,并在出现InvalidAccessError异常时尝试抛出该异常。 未来的方向是只允许工作线程中的XMLHttpRequests。此消息旨在作为对此的警告。

  • async:false
    =代码暂停。(其他代码正在等待此操作完成。)
  • async:true
    =code继续。(没有暂停。其他代码未等待)

就这么简单。

将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_数据之后被称为

乔:这取决于后台是否有工作线程。我一直想知道这是如何实现的,因为JavaScript没有线程化。@L.DeLeo-no,一点也不-延迟是管理异步函数调用复杂性的另一种方法-
async:false
完全消除了调用的异步性。对
ajax
的调用会阻塞—在服务器响应之前,它后面的代码不会执行。请记住,这也意味着浏览器不会捕获/触发在执行ajax时发生的任何事件。我好不容易才发现这一点,试图弄明白为什么Firefox没有触发点击事件。它原来是因为一个“强制”模糊事件,下面的同步调用阻止了它。@Matt不,它不是(再^^)它似乎是
async:false
死了,我尝试了它,主线程上的
18:17:49.384 Synchronous XMLHttpRequest被弃用,因为它对最终用户的体验有不利影响。需要更多帮助http://xhr.spec.whatwg.org/ 1 jquery.js:9061:4
看起来类似于这个问题:使调用同步…是的,在我看来,如果它不是异步的,它应该被称为“Ajax”(异步JavaScript和XML)以外的东西…异步意味着脚本将向服务器发送请求,在不等待回复的情况下继续执行。收到回复后,立即触发浏览器事件,这反过来又允许脚本执行相关的操作。再多的JavaScript也无法阻止浏览器窗口关闭我需要async false来处理一些完全无关的事情,但它解决了我的问题,因为它允许我的脚本在将xml文件填充到页面上之前从xml文件中获取一个未定义的值。以防万一其他任何人拥有该值和我一样的问题:这个答案强调了
return php_data
语句不能在success函数中,而必须在
$.ajax()函数之外。我在
success:function(){}
中放置了我的
return php_data
等价物,它总是返回unfinedy。您可以删除
success
回调,并将代码缩短为:
var data=$.ajax({url:'http://httpbin.org/get,异步:false})