猿问

如何修复 JavaScript 中未定义的 TypeError?对象的所有字段都存在

在下面的代码片段中,我从java Servlet接收一个JSON对象并访问该对象的属性。


JSON 对象:


{

  "redirect": "/index.html",

  "logout": "/_cloudshellProxy/_ah/logout?continue\u003d%2Findex.html",

  "status": true,

  "register": true,

  "user": {

    "email": "s@example.com",

    "username": "Yevesky",

    "college": {

      "name": "Lafayette College",

      "key": "aglzcHN0ZWFtMTlyFAsSB0NvbGxlZ2UYgICAgICAswgM"

    },

    "key": "aglzcHN0ZWFtMTlyEQsSBFVzZXIYgICAgICgxAgM"

  }

}

以下是我如何处理来自 servlet 的对象。


fetch("/getUserInfo").then(response => response.json()).then(object =>

    {

        jsonObject = object;

        console.log(jsonObject);

        setUpUserPage(jsonObject);

        loadClasses();

    });

    

function setUpUserPage(json){

    const jsonData = json;

    var name = document.createElement("h3");

    name.innerText = String(jsonData.username);

    var uni = document.createElement("h6");

    uni.innerText = String(jsonData.college.name); // Error occurs here

    var classification = document.createElement("h6");

    console.log(jsonData.classes);

    

    if (jsonData?.isProf)

    {

        classification.innerText = "Professor";

    }

    else

    {

        classification.innerText = "Student";

    }

    var email = document.createElement("h6");

    email.innerText = String(jsonData.email);

    var spacer = document.createElement("BR");


    //change nickname link

    var changeNicknameP = document.createElement("p");

    changeNicknameP.innerText = "Change your nickname: ";

    var anchor = document.createElement("A");

    var link = document.createTextNode("here");

    anchor.setAttribute("href", "#");

    anchor.appendChild(link);

    changeNicknameP.appendChild(anchor);


}

问题是我不明白为什么我会得到一个“TypeError:无法读取未定义的属性'名称'”,如果对象有这样的属性?

它只是JavaScript还是我没有遵循一个过程。

我每次都会在控制台上打印JSON对象,以查看该属性是否确实存在。


BIG阳
浏览 89回答 1
1回答

白衣非少年

这是因为您可能犯了一个错误。“学院”是用户的属性,而不是你的jsonData。将你的行替换为:uni.innerText = String(jsonData.user.college.name);如果响应可以更改,请不要忘记检查对象的属性(例如,在某些情况下,用户或学院是选项属性)PS:对不起,我无法发表评论,因为我对SO没有足够的观点。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答