XMLHttpRequest处理XML响应需设置responseType="document"并确保服务端返回合法XML及Content-Type: application/xml,再通过responseXML获取Document对象进行DOM操作;若失败则用DOMParser解析responseText。
XMLHttpRequest 对象处理 XML 响应的核心是设置正确的响应类型,并通过 responseXML 属性获取解析后的 XML 文档对象(Document),然后用 DOM 方法遍历或查询节点。
服务端必须返回格式良好的 XML,且 HTTP 响应头中包含 Content-Type: application/xml 或 text/xml。否则浏览器可能无法自动解析为 XML 文档,responseXML 会为 null。
echo ""; 或模板意外换行)虽然 responseXML 在默认情况下可用,但显式设置 responseType = "document" 更可靠,尤其在现代浏览器中可避免 MIME 类型不匹配导致的静默失败。
xhr.responseType = "document";
if (xhr.responseXML && xhr.responseXML.do
cumentElement) { ... }
responseXML 为 null,可退而求其次用 responseText + DOMParser 手动解析(见下文)responseXML 是一个标准的 XML Document 对象,支持 getElementsByTagName、querySelector、getElementsByClassName(若命名空间兼容)等方法。
const root = xhr.responseXML.documentElement;
元素:const items = xhr.responseXML.getElementsByTagName("item");
xhr.responseXML.evaluate("//title", xhr.responseXML, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
items[0].textContent 或 items[0].firstChild?.nodeValue
当 responseXML 不可用(如跨域限制、MIME 错误、或需要更灵活控制时),可用 DOMParser 手动解析字符串:
const parser = new DOMParser();const xmlDoc = parser.parseFromString(xhr.responseText, "application/xml");xmlDoc.querySelector("parsererror") 判断是否解析失败if (xmlDoc.querySelector("parsererror")) console.error("XML 解析失败", xmlDoc.querySelector("parsererror").textContent);
不复杂但容易忽略的是响应头和编码一致性——只要服务端返回干净 XML 且 MIME 正确,responseXML 就能直接用 DOM 方式安全访问。