You need to enable JavaScript to run this app. HTML页面加载正常但XMLHttpRequest请求出现报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

HTML页面加载正常但XMLHttpRequest请求出现报错如何解决

XMLHttpRequest报错问题修复方案

核心错误原因

  • onreadystatechange事件缺少readyState判断:该事件会在请求状态每次变化时触发,只有当readyState === 4时请求才正式完成,未加该判断会在请求还未结束时就读取status值,此时status为0直接触发错误逻辑,甚至抛出异常
  • 回调参数逻辑错位:原代码成功请求时将状态码作为第一个参数传入回调,和调用处的错误判断逻辑不匹配,容易引发逻辑混乱
  • 协议/路径问题:如果直接用file://协议打开HTML页面,浏览器安全策略默认禁止读取本地JSON文件;如果games.json文件路径和当前HTML路径不匹配,也会触发404错误

修复后完整代码

var getJSON = function (url, callback) {
  var ajax = new XMLHttpRequest();
  ajax.open('GET', url, true);
  ajax.responseType = 'json';
  // 改用onload事件,仅在请求完成时触发,省略readyState判断
  ajax.onload = function () {
    if (ajax.status === 200) {
      // 成功时错误参数为null,符合常规异步回调规范
      callback(null, ajax.response);
    } else {
      callback(new Error(`请求失败,状态码:${ajax.status}`), ajax.response);
    }
  };
  // 捕获网络异常错误
  ajax.onerror = function () {
    callback(new Error('网络请求异常,请检查路径或访问协议'), null);
  };
  ajax.send();
};

getJSON('games.json', function (err, data) {
  // 只要err不为空就走错误逻辑
  if (err) {
    console.error('出错:', err);
    return;
  }
  var bets = document.getElementById('bets-container-lotos');
  bets.innerHTML = '';
  bets.innerHTML +=
    '<button id="bets-lotofacil-color"  class="bets-lotofacil" onclick="lotofacil()">' +
    data.types[0].type +
    '</button>';
});

额外排查项

  • 不要直接双击打开HTML文件,需通过本地服务(如VS Code的Live Server插件、本地Nginx/Apache服务)访问页面,规避file协议的安全限制
  • 确认games.json文件和当前HTML文件处于同一目录,否则调整getJSON的第一个参数为正确的文件路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 05:27:02