使用JavaScript在页面上显示JSON

使用JavaScript在页面上显示JSON,javascript,json,function,dom,xmlhttprequest,Javascript,Json,Function,Dom,Xmlhttprequest,我不知道为什么下面代码段中的代码在“generateSkillData”函数中返回此错误: Uncaught TypeError: Cannot read property 'forEach' of undefined at generateSkillData (script.js:54) at loadingDone (script.js:45) at XMLHttpRequest.request.onload (script.js:24) [ { "skil

我不知道为什么下面代码段中的代码在“generateSkillData”函数中返回此错误:

Uncaught TypeError: Cannot read property 'forEach' of undefined
    at generateSkillData (script.js:54)
    at loadingDone (script.js:45)
    at XMLHttpRequest.request.onload (script.js:24)
[
{
    "skill": "Python",
    "description": "An increasingly popular server-side language"
}
] 
而不是显示skills.json的结果(参见下面的一个对象示例):

Uncaught TypeError: Cannot read property 'forEach' of undefined
    at generateSkillData (script.js:54)
    at loadingDone (script.js:45)
    at XMLHttpRequest.request.onload (script.js:24)
[
{
    "skill": "Python",
    "description": "An increasingly popular server-side language"
}
] 
我还有其他类似的代码,运行良好。我从代码中借用了很多功能。

函数getSkillData(errorFunc,successFunc){ let request=new XMLHttpRequest(); open(“GET”,“js/skills.json”,true); request.onload=函数(){ 如果(request.status>=200&&request.status<400){ log(“成功!通话成功!”); const data=request.responseText; successFunc(数据){ 日志(“错误:没有可用数据”); } }; request.onerror=函数errorFunc(){ errorFunc(); }; }; request.send(); } 函数加载完成(数据){ 控制台日志(“加载完成”); skill_box.innerHTML=“”; const finished_markup=generateSkillData(数据); const skill_container=document.getElementById(“skill_框”); skill_container.insertAdjacentHTML(“beforeed”,finished_标记); }; 函数generateSkillData(响应){ 让skill_markup=“”; response.data.forEach(函数(thing){ 技能标记+=formatSkillData(东西); }); 返回技能和标记; } 函数formatSkillData(项){ 常量标记=`
  • ${item.skill}
  • ${item.description}
`; 返回标记; } 函数加载错误(){ log(“错误加载技能:稍后再试”); document.body.insertAdjacentHTML(“beforeend”,“发生错误,请稍后重试””; }; (函数init(){ getSkillData(加载错误,加载完成); })()

技能名称:
技能描述:
在使用console.log-on响应后在此处添加了JSON.parse

function generateSkillData(response){
    let skill_markup = "";
    console.log(response);
    response.forEach(function (thing) {
        skill_markup += formatSkillData(thing);
    });
    return skill_markup;
}

在使用console.log之后,我想出了如何做

您必须解析对JSON的响应

JSON.parse(response);
在每次通话前插入。
通过这种方式,您可以迭代它并获得特定的对象。

generateSkillData
中的
response
是一个字符串,它的语法是:
successFunc(data);{console.log(“错误:没有可用的数据”);}
?实际上不确定,抱歉