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

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

在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开头,这个是跨域请求。
执行后再控制台打印出来的顺序如下:


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

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

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


请问楼主,你js运行时所在的页面与你请求的 url 是否在同一个域/网站下?

如果不是的话, 就算你指定了 async:false 也没有用.
跨域的话,会使用 jsonp, 而jsonp没有同步这一说.


请参考API

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