常见原因是未等待请求完成就读取 responseText;XMLHttpRequest 默认异步,需监听 onload 或确保 readyState === 4 且 status ≥ 200 才安全读取,尤其注意 file:// 协议下 status 常为 0。

XMLHttpRequest 发送 GET 请求时为什么 responseText 是空的
常见原因是没等请求完成就去读取 responseText。XMLHttpRequest 默认异步,send() 立即返回,但响应还没到。必须监听 onload 或检查 readyState === 4 且 status === 200 才安全读取。
- 用
onload最简洁,它只在成功收到完整响应后触发 - 避免只靠
onreadystatechange+readyState === 4,因为这时可能status是 0(本地文件或 CORS 失败) - 本地双击打开 HTML 文件时,
file://协议下多数浏览器会令status === 0,即使内容已加载
const xhr = new XMLHttpRequest();
xhr.open('GET', 'data.xml');
xhr.onload = function() {
if (xhr.status >= 200 && xhr.status < 300) {
console.log(xhr.responseText); // ✅ 安全
}
};
xhr.send();
如何正确解析返回的 XML 字符串
responseText 是纯字符串,不能直接当 DOM 操作;必须用 responseXML 或手动解析。但 responseXML 只在响应头 Content-Type 包含 xml 且解析成功时才有效——否则为 null。
- 服务端未设置
Content-Type: application/xml?responseXML很可能为空 - XML 内容有语法错误(如未闭合标签),也会导致
responseXML === null - 稳妥做法:先尝试
responseXML,失败则用DOMParser手动解析responseText
xhr.onload = function() {
let doc;
if (xhr.responseXML && xhr.responseXML.documentElement) {
doc = xhr.responseXML;
} else {
const parser = new DOMParser();
doc = parser.parseFromString(xhr.responseText, 'application/xml');
}
const title = doc.querySelector('title')?.textContent;
};
POST 提交 XML 数据时 Content-Type 怎么设
如果后端期望接收原始 XML 文本(比如 SOAP 接口),必须显式设置 Content-Type: application/xml,否则服务器可能按 text/plain 解析而报错。
- 用
setRequestHeader()设置,且必须在open()之后、send()之前调用 - 发送的是字符串,不是
Document对象;若用XMLSerializer序列化 DOM,结果仍是字符串 - 注意编码:XML 声明中写的是
utf-8,发送前确保字符串确实是 UTF-8 编码(现代浏览器 JS 字符串默认是 UTF-16,但send(string)会自动转 UTF-8)
const xmlStr = ``; xhr.open('POST', '/api'); xhr.setRequestHeader('Content-Type', 'application/xml'); xhr.send(xmlStr); 123
XMLHttpRequest 被废弃了吗?还能用吗
没有被废弃,但新项目更推荐 fetch()。XMLHttpRequest 仍被所有浏览器完整支持,W3C 标准也未标记为过时;只是它 API 设计陈旧(回调嵌套、事件分散、不支持 Promise),而 fetch() 更简洁、可与 async/await 配合。
家电公司网站源码是一个以米拓为核心进行开发的家电商城网站模板,程序采用metinfo5.3.9 UTF8进行编码,软件包含完整栏目与数据。安装方法:解压上传到空间,访问域名进行安装,安装好后,到后台-安全与效率-数据备份还原,恢复好数据后到设置-基本信息和外观-电脑把网站名称什么的改为自己的即可。默认后台账号:admin 密码:132456注意:如本地测试中127.0.0.1无法正常使用,请换成l
立即学习“Java免费学习笔记(深入)”;
- 需要上传进度监控?
XMLHttpRequest.upload.onprogress目前仍是唯一标准方案 - 要中止请求?
xhr.abort()比AbortController在旧环境里更兼容 - 处理带 cookie 的跨域请求?两者都需配置
withCredentials,但fetch的credentials: 'include'更直观
真正容易被忽略的是:XMLHttpRequest 的错误边界比 fetch 更模糊——网络中断、DNS 失败、CORS 拒绝,有时都只触发 onerror,不提供具体原因。调试时得结合浏览器 Network 面板看真实状态码和响应头。









