onreadystatechange监听ajax状态变化,需同时满足readystate===4和status>=200&&status

用 onreadystatechange 监听 Ajax 请求状态变化,核心是给 XMLHttpRequest 实例的该属性赋一个函数,当 readyState 改变时自动触发,再结合 status 判断是否成功。
理解 readyState 的 5 个状态值
readyState 是 XMLHttpRequest 对象的只读属性,表示请求所处的阶段:
-
0(UNSENT):请求未初始化,
open()还没调用 -
1(OPENED):已调用
open(),但还没调用send() -
2(HEADERS_RECEIVED):已收到响应头,
send()已执行完毕 - 3(LOADING):正在接收响应体,可能只收到部分数据(流式传输时有用)
- 4(DONE):请求完成,响应全部接收完毕(注意:不等于成功!)
必须检查 status 才能确认是否成功
仅靠 readyState === 4 不够——它只代表“通信结束”,可能是 404、500 或网络中断。真正判断成功需同时满足:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
xhr.readyState === 4xhr.status >= 200 && xhr.status (或 <code>status === 0在某些离线/本地场景)
例如:if (xhr.readyState === 4 && xhr.status === 200) 才安全处理响应数据。
正确绑定 onreadystatechange 的写法
必须在调用 open() 之前或之后、但在 send() 之前 设置,否则可能错过早期状态变更(如 0→1)。推荐写法:
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status >= 200 && xhr.status
<h3>常见易错点提醒</h3>
- 不要用
==比较readyState,用严格等于=== - 避免在函数内重复检查
readyState !== 4就 return,容易漏掉错误状态(如 404 时 readyState 仍是 4) -
onreadystatechange是旧式写法,现代项目更推荐fetch()+async/await,但兼容性要求高时仍需掌握 - 如果需要上传进度,应使用
upload.onprogress,而非依赖readyState === 3
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










