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

使用JavaScript+AJAX调用GitHub API报错:id未定义求解决

解决你的AJAX获取GitHub仓库列表的错误问题

嘿,我来帮你搞定这个报错!你遇到的Uncaught ReferenceError是因为你直接用了id、full_name、html_url这些变量,但它们根本没被定义——这些其实是GitHub API返回的每个仓库对象的属性,得从你解析后的repos数组里的每个元素去获取才行。另外,用for...in遍历数组也不是最佳实践,容易拿到数组原型链上的额外属性,换成普通的for循环或者forEach会更稳妥。

错误原因拆解

你原来的循环里写的是:

for(var i in repos){
  output += '<ul>' + 
    '<li>ID: ' +id[i]+'</li>' + 
    '<li>Full Name: ' +full_name[i]+'</li>' + 
    '<li>URL: ' +html_url[i]+'</li>'+ 
  '</ul>'
}

这里的id[i]完全找不到对应的变量,正确的写法应该是repos[i].id,因为repos是一个数组,每个元素是包含仓库信息的对象,你得通过对象.属性的方式访问。

修正后的完整代码

let gitHubRequest = new XMLHttpRequest();
gitHubRequest.open('GET', 'https://api.github.com/users/billythesailor/repos', true);

gitHubRequest.onreadystatechange = function() {
  if(this.readyState == 4 && this.status == 200) {
    var repos = JSON.parse(this.responseText);
    var output = '';
    
    // 用普通for循环遍历数组,更安全
    for(var i = 0; i < repos.length; i++) {
      // 从当前仓库对象中获取属性
      output += '<ul>' +
        '<li>ID: ' + repos[i].id + '</li>' +
        '<li>Full Name: ' + repos[i].full_name + '</li>' +
        '<li>URL: <a href="' + repos[i].html_url + '" target="_blank">' + repos[i].html_url + '</a></li>' +
      '</ul>';
    }
    
    document.getElementById('repos').innerHTML = output;
  }
}

gitHubRequest.send();

额外优化点

我还给你加了URL的链接标签,这样点击就能直接跳转到仓库页面,体验更好。另外把代码做了格式化,可读性大大提升,以后调试也更方便。

现在运行这段代码,应该就能正常把你的GitHub仓库列表渲染到id为repos的<p>标签里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:11:27