AJAX请求XML数据怎么处理 XMLHttpRequest教程


用 XMLHttpRequest 获取 XML 数据需三步:声明 responseType 或 Accept 头确保获取 XML;检查 status/readyState 并用 DOMParser 补救 responseXML 为空;再用 DOM 方法提取数据并全面错误处理。

用 XMLHttpRequest 获取 XML 数据,核心是设置请求头、正确解析响应、再按需提取内容。现代浏览器都支持,但细节容易出错。

发送请求前:指定响应类型为 XML

如果不明确告诉浏览器“我要 XML”,responseXML 可能为空或解析失败。

  • 调用 request.responseType = 'document'(推荐),确保返回 DOM 文档对象
  • 或设置请求头 request.setRequestHeader('Accept', 'application/xml'),提示服务端返回 XML
  • 注意:如果服务端返回的是纯文本 XML(Content-Type 不是 application/xmltext/xml),responseXML 仍可能为 null,此时可用 DOMParser 手动解析 responseText

接收响应后:安全获取和验证 XML 文档

不能直接信任 responseXML,要检查是否有效。

  • 先判断 request.status === 200request.readyState === 4
  • 再检查 request.responseXML && request.responseXML.documentElement 是否存在
  • 如果 responseXML 为 null,用 new DOMParser().parseFromString(request.responseText, 'text/xml') 补救
  • 解析后检查 parserError 元素(如 Chrome/Firefox 中的 parsererror 标签),判断是否解析失败

从 XML 中提取数据:用标准 DOM 方法操作

拿到 responseXML(即 Document 对象)后,就和操作 HTML 一样:

  • getElementsByTagName('item') 获取节点列表
  • querySelector('book title')querySelectorAll('author[name="zhang"]') 精准定位
  • 读取文本内容:对每个元素调用 textContent(兼容性好)或 innerHTML(仅当含标签时)
  • 读取属性:用 getAttribute('id')element.id(部分属性有快捷方式)

错误处理不能省:网络、格式、结构都要覆盖

XML 请求失败原因多,只看 status=200 不够。

  • 网络失败:onerror 回调必须监听
  • XML 格式错误:解析后检查是否存在 parsererror 节点
  • 字段缺失:访问 item.getElementsByTagName('price')[0]?.textContent 前加可选链或判断长度
  • 编码问题:确保服务端返回的 XML 声明匹配实际编码(如 ),否则中文可能乱码

不复杂但容易忽略。关键就是三步:声明要 XML、安全接住它、像操作网页一样查数据。


# html  # ajax  # 编码  # 浏览器  # app  # firefox  # chrome  # NULL  # xml  # 对象  # dom  # innerHTML  # 服务端  # 三步  # 是否存在  # 为空  # 的是  # 文档  # 我要  # 都要  # 可选  # 再用 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么查看电脑配置_Win11硬件配置详细查询方法【详解】  Mac如何查看电池健康百分比_Mac系统信息电源检测  Windows10蓝屏代码DPC_WATCHDOG_VIOLATION_Win10死机修复指南  如何在 Go 结构体中正确初始化 map 字段  mac怎么安装字体_MAC添加第三方字体与字体册管理【教程】  php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】  Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】  Win11怎么开启上帝模式_创建Windows 11 God Mode全能文件夹【技巧】  Windows蓝屏错误0x0000001E怎么修复_KMODEEXCEPTIONNOTHANDLED排查  Win10怎样安装PPT模板_Win10安装PPT模板教程【步骤】  如何在Golang中编写端到端测试_Golang E2E测试流程示例  windows如何修改文件默认打开方式_windows设置程序关联教程  Windows10如何彻底关闭自动更新_Win10服务与组策略双重禁用  Win10怎么限制单程序CPU占用上限_Win10任务管理器亲和性或第三方工具均衡负载【技巧】  如何更改Windows资源管理器的默认启动位置?(快速访问/此电脑)  Mac如何修改Hosts文件?(本地开发与屏蔽网站)  Python并发安全问题_资源竞争说明【指导】  Win11怎么更改系统语言_Win11中文语言包下载与安装【指南】  如何在 Python 中将 ISO 8601 时间戳转换为日期并计算日期差值  php删除数据怎么加限制_带where条件删除避免全删【指南】  Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项  Win11怎么自动隐藏任务栏_Win11全屏显示设置【美化】  Win11怎么开启远程桌面_Win11系统远程桌面启用开关  Win11如何设置系统声音_Win11系统声音调整教程【攻略】  php嵌入式日志记录怎么实现_php将硬件数据写入本地日志文件【指南】  用lighttpd能运行php吗_lighttpd配置php步骤【教程】  如何使用Golang捕获并记录协程panic_保证主程序稳定运行  Mac如何彻底清理浏览器缓存?(Safari与Chrome)  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Win10系统字体模糊怎么办_Windows10高级缩放设置修复  Win11怎么恢复出厂设置_Win11重置此电脑保留文件方法【详解】  windows如何禁用驱动程序强制签名_windows高级启动设置指南  php下载安装选zip还是msi格式_两种安装包对比【教程】  PHP中require语句后直接调用返回对象方法的语法解析  如何在 Go 中正确反序列化多个同级 XML 元素(而非单个根节点)  php控制舵机角度怎么调_php发送pwm信号控制舵机转动【解答】  php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】  如何使用Golang实现函数指针_函数变量与回调示例  c++的mutex和lock_guard如何使用 互斥锁保护共享资源【多线程】  Windows10系统怎么查看系统版本_Win10运行winver命令查询  Win11怎么设置默认终端应用_Windows11开发者选项终端  phpstudy本地环境mysql忘记密码_重置mysqlroot密码操作流程【解答】  Go 中实现 Python urllib.quote() 功能的等效方法  MAC如何隐藏文件夹及文件_MAC终端命令隐藏与第三方工具加密【教程】  Python文本编码与解码_跨平台解析说明【指导】  Win11怎么查看wifi信号强度_检测Windows 11无线网络质量方法【详解】  Go 语言标准库为何不提供泛型切片的 Contains 方法?  c++输入输出流 c++ cin与cout格式化输出【方法】  如何用列表一次性对 DataFrame 的指定列应用字典映射  如何使用Golang benchmark测量函数延迟_统计执行耗时 

 2026-01-03

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.