You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox下同步XMLHttpRequest弃用引发XML解析异常及代码改造咨询

问题1:你的理解是否正确

  • 核心判断方向是对的:主线程同步XMLHttpRequest确实已被主流浏览器弃用,目前Firefox仅抛出警告、尚未完全禁用,但后续版本会逐步限制使用,这确实是你代码的潜在风险点。
  • 你直接将第三个参数改为true后功能异常的原因是:异步模式下xmlhttp.send()不会阻塞后续代码执行,请求还在后台发送时,你就已经执行了读取responseXML、写入DOM的逻辑,此时返回结果还没拿到,自然功能异常。
  • W3School的示例能正常运行是因为代码逻辑极简,Firefox当前版本仍兼容旧的同步XHR写法,仅抛出警告提示。

问题2:改造后的异步XML解析代码

方案1:基于XMLHttpRequest的异步改造(兼容旧浏览器)

<!DOCTYPE html>
<html>
<body>
<h1>W3Schools Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br>
<b>From:</b> <span id="from"></span><br>
<b>Message:</b> <span id="message"></span>
</div>

<script>
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "note.xml", true);
// 监听请求状态变化
xmlhttp.onreadystatechange = function() {
  // 请求完成且响应成功时再处理XML数据
  if (this.readyState == 4 && this.status == 200) {
    const xmlDoc = this.responseXML;
    document.getElementById("to").innerHTML = 
      xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    document.getElementById("from").innerHTML = 
      xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
    document.getElementById("message").innerHTML = 
      xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
  }
};
xmlhttp.send();
</script>
</body>
</html>

方案2:用更现代的Fetch API实现(推荐)

<!DOCTYPE html>
<html>
<body>
<h1>W3Schools Internal Note</h1>
<div>
<b>To:</b> <span id="to"></span><br>
<b>From:</b> <span id="from"></span><br>
<b>Message:</b> <span id="message"></span>
</div>

<script>
fetch("note.xml")
  .then(response => response.text())
  .then(xmlStr => {
    const parser = new DOMParser();
    const xmlDoc = parser.parseFromString(xmlStr, "text/xml");
    document.getElementById("to").innerHTML = 
      xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
    document.getElementById("from").innerHTML = 
      xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue;
    document.getElementById("message").innerHTML = 
      xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue;
  });
</script>
</body>
</html>

内容的提问来源于stack exchange,提问作者user17148425

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 03:36:03