async
默认是 true
,即为异步方式,$.Ajax
执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax
里的success方法,这时候执行的是两个线程。若要将其设置为false
,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
这个其他操作具体举个例子呢,是指 http 请求还是 js 脚本?
async
默认是 true
,即为异步方式,$.Ajax
执行后,会继续执行ajax后面的脚本,直到服务器端返回数据后,触发$.Ajax
里的success方法,这时候执行的是两个线程。若要将其设置为false
,则所有的请求均为同步请求,在没有返回值之前,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
这个其他操作具体举个例子呢,是指 http 请求还是 js 脚本?
如果ajax是同步的,就是说js顺序执行,http请求是ajax发的,js是就是js,不要混为一谈。
用户其他操作,应该是指用户触发了和js有关的操作。如果ajax后面有绑定某个元素的时间,是可以触发的。
最终总结就是,当前js脚本,同步ajax时,脚本顺序执行;异步ajax时,异步执行,所谓异步执行就是,执行到ajax时,不等请求是否返回,直接执行ajax之后的js语句。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
先上图
async
为false
的时候,阻塞代码直到 ajax 调用返回,所以是先执行的done
(即success
) 再执行的 ajax 调用之后的那句console.log
。async
为true
(默认) 的时候,不阻塞代码,所以下面的console.log
先执行,等 ajax 返回之后再执行的done
里面的console.log
。