ajax请求的异步或同步执行由xmlhttprequest.open()的第三个参数async控制:true为异步(默认、推荐),false为同步(已弃用、阻塞主线程、页面卡死)。

JavaScript 中配置 AJAX 请求的异步或同步执行,核心在于控制 XMLHttpRequest 的第三个参数(async),或 jQuery 等库中对应的 async 选项。默认是异步,同步需显式设置且已不推荐使用。
XMLHttpRequest 原生方式:靠 open() 的 async 参数
调用 xhr.open(method, url, async) 时,第三个布尔值决定模式:
-
异步(推荐,默认):传
true(可省略,因为默认就是true)
请求发出后 JS 立即继续执行,响应通过onreadystatechange或addEventListener('load')处理。 -
同步(禁用):传
false
JS 主线程会完全阻塞,直到响应返回;页面卡死、无法交互,现代浏览器已弃用该模式(部分版本直接报错或警告)。
jQuery.ajax():用 async 选项开关
jQuery 封装了底层细节,通过 async: true/false 控制:
-
异步(默认):
async: true可省略$.ajax({ url: '/api/user', success: data => console.log(data) }); -
同步(不建议):
async: false
会导致整个浏览器界面冻结,用户无法点击、滚动、输入——哪怕只等 200ms,体验也极差。
现代写法:Promise / async-await 天然异步
原生 fetch() 和基于 Promise 的封装(如 axios)只支持异步,没有同步选项:
fetch('/api/data').then(r => r.json()).then(data => {...})async function load() { const res = await fetch('/api/data'); return await res.json(); }- 它们底层仍用事件循环调度,不可能阻塞主线程,从设计上规避了同步风险。
为什么同步模式应该避免
不是“不能用”,而是“不该用”:
- 浏览器主线程被锁死,页面完全无响应,用户可能强行刷新或关闭标签页;
- Chrome、Firefox 已在开发者工具中标记
async: false为废弃(deprecated),未来可能彻底移除; - 即使业务逻辑看似“必须等前一个结果”,也应改用 Promise 链、
await或回调嵌套,而非同步阻塞。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











