贝利信息

JavaScript如何通过AJAX请求XML AJAX获取XML数据方法

日期:2026-01-18 00:00 / 作者:煙雲
JavaScript可通过XMLHttpRequest或fetch()获取并解析XML数据:前者兼容旧浏览器,需设responseType='document';后者需用DOMParser解析text响应,注意CORS、MIME类型、编码及错误处理。

JavaScript可以通过原生 XMLHttpRequest 或现代的 fetch() API 发起请求获取 XML 数据,关键在于正确设置请求头、响应类型,并解析返回的 XML 文档。

使用 XMLHttpRequest 获取并解析 XML

这是最传统且兼容性最好的方式,适合需要支持旧版浏览器的场景。

示例:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'data.xml');
xhr.responseType = 'document'; // 显式要求返回 XML 文档
xhr.onload = function() {
  if (xhr.status === 200 && xhr.responseXML) {
    const title = xhr.responseXML.querySelector('title')?.textContent;
    console.log(title);
  }
};
xhr.send();

使用 fetch() 获取 XML(推荐新项目)

fetch() 更简洁,但默认不自动解析 XML,需手动处理响应体。

示例:

fetch('data.xml')
  .then(res => {
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return res.text(); // 先取原始文本
  })
  .then(str => {
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(str, 'application/xml');
    // 检查解析错误(如格式不合法)
    const errorNode = xmlDoc.querySelector('parsererror');
    if (errorNode) throw new Error('Invalid XML');
    const items = xmlDoc.querySelectorAll('item');
    items.forEach(item => console.log(item.textContent));
  })
  .catch(err => console.error('加载 XML 失败:', err));

常见问题与注意事项

实际开发中容易踩坑的地方:

简单封装一个 XML 请求工具函数

便于复用,兼顾错误提示和基本解析:

function loadXML(url) {
  return fetch(url)
    .then(res => {
      if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`);
      return res.text();
    })
    .then(str => {
      const parser = new DOMParser();
      const doc = parser.parseFromString(str, 'application/xml');
      if (doc.querySelector('parsererror')) {
        throw new Error('XML 解析失败');
      }
      return doc;
    });
}

// 使用
loadXML('config.xml')
  .then(xmlDoc => console.log(xmlDoc.documentElement.tagName))
  .catch(err => console.error(err));