在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()