如何使用JSON调用Github API获取仓库最新Release,代码返回undefined如何解决
问题原因
你调用的https://api.github.com/repos/NAME/REPO/releases是GitHub的「获取仓库所有Release列表」接口,返回的JSON结构是Release对象组成的数组,不是单个Release对象。你直接访问根对象的tag_name属性,数组本身没有这个属性,自然返回undefined。
修正方法
最简修改(取最新发布版本)
把代码里读取属性的行修改为取数组第一个元素的tag_name即可:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var JS = JSON.parse(this.responseText); // 数组第一个元素就是最新发布的Release console.log(JS[0].tag_name) } }; // 替换成实际的所有者名和仓库名 xmlhttp.open("GET", "https://api.github.com/repos/NAME/REPO/releases", true); xmlhttp.send();
更稳妥的写法(兼容无Release、过滤预发布版本)
可以加一层判断,避免仓库无Release时报错,也可以自行过滤预发布版本:
var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { var releaseList = JSON.parse(this.responseText); if(releaseList.length === 0) { console.log('该仓库暂无发布的Release'); return } // 可选:过滤掉预发布版本,取最新的正式版 var latestStable = releaseList.find(item => !item.prerelease) if(latestStable) { console.log(latestStable.tag_name) } else { console.log('该仓库暂无正式发布的Release') } } }; xmlhttp.open("GET", "https://api.github.com/repos/NAME/REPO/releases", true); xmlhttp.send();
额外注意
请求URL里的NAME是仓库所属的用户名/组织名,REPO是仓库名,需要替换成你实际要查询的仓库对应值,否则接口会返回404错误。
内容的提问来源于stack exchange,提问作者benjm
相关产品推荐
相关产品推荐

