js中已经使用关闭了ajax的异步请求,为什么还是异步

走着
  • 74

在js代码中已经使用async: false,关闭了异步请求,为什么仍然是异步呢。

$.ajax({
                        async: false,
                        url: "http://my.example.com/.......",
                        type: 'GET',
                        dataType: 'JSON',
                        success: function (data, textStatus, jqXHR) {
                            console.log("data.inviteId=>" + data.inviteId);
                            inviteurl_1 = 'http://example.com/.......';
                            console.log("inviteurl_1=>" + inviteurl_1);
                            if (cmd == "weixin") {
                                bdurl = "http://example.com/.......";
                                console.log("bdurl_weixin=>" + bdurl);
                            } else {
                                bdurl = inviteurl_1;
                                console.log("bdurl_noweixin=>" + bdurl);
                            }
                            console.log("bdurl_zuizhong=>" + bdurl);
                        }

                    });
                    console.log("bdurl_quanju=>" + bdurl);
                    config.bdUrl = bdurl;
                    console.log("flag=>111111111111111111111111111");

其中bdurl是一个全局变量,用来执行请求的的域名是www开头,这个是跨域请求。
执行后再控制台打印出来的顺序如下:
图片描述

回复
阅读 2.5k
2 个回答
✓ 已被采纳

请参考API

async (默认: true)
类型: Boolean
默认设置下,所有请求均为异步请求(也就是说这是默认设置为 true )。如果需要发送同步请求,请将此选项设置为 false 。跨域请求和 dataType: "jsonp" 请求不支持同步操作。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。从 jQuery 1.8 开始, jqXHR ($.Deferred)中使用  async: false  已经过时。您必须使用的 success/error/complete 的回调选项代替相应的jqXHR对象的方法,比如jqXHR.done() 或者过时的jqXHR.success()

首先想知道题主是怎么理解同步和异步的。大概举个例子吧。

$.ajax({}).always(function(){
 console.log(1);
})
console.log(2);

如果是异步的话那么输出顺序是 2,1
如果是同步的话,那么输出顺序是1,2

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏