首页 > 解决方案 > 为什么无法读取此 JSON 属性?

问题描述

我正在尝试发出一个 JSON 请求,该请求返回有关某人的年龄、性别和情感的数据。我有这个代码,响应的工作原理与console.log(response)响应一样,但是当我尝试在 if 语句中使用 JSON 键时,我在 Chrome 中收到此错误消息:Uncaught TypeError: Cannot read property 'emotion' of undefined at XMLHttpRequest.processRequest (test.html:15)。代码如下。

var xhr = new XMLHttpRequest();
var url = "http://cors-anywhere.herokuapp.com/http://86.15.11.51:8081/getPersons?format=json"
xhr.open('GET', url, true);
xhr.send();
xhr.onreadystatechange = processRequest;

function processRequest(e) {
  if (xhr.readyState == 4 && xhr.status == 200) {
    response = JSON.parse(xhr.responseText);
    var response2 = JSON.stringify(response, null, 4);
    document.write(response2);
    for (var i = 0; i < 1; i++) {
      {
        var imgArray = ['1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg'];
        var emotion = response[i]['emotion']
        var gender = response[i]['gender']
        var age = response[i]['age']
        var basePath = "http://advertdemo.ga/adverts/" + emotion + "/" + gender + "/" + age + "/";
        document.getElementById("demo").innerHTML = basePath;

        function imgRandom() {
          for (var i = 0; i < 18; i++) {
            var rand = imgArray[Math.floor(Math.random() * imgArray.length)];
            var image = new Image();
            image.src = basePath + rand;
            document.body.appendChild(image);
            break;
          }
        }

        imgRandom();
        console.log(basePath + rand);


        break;
      }
    }
  }
}
<html>

<body>
</body>

</html>

标签: javascriptjson

解决方案


response不是数组(!) - 那么为什么你像数组一样使用和索引它

你应该这样做:

response['persons'][0].emotion

并且不要在 for 循环中硬编码上索引:for (var i = 0; i < 1; i++)


推荐阅读