为什么不能读取这个JSON属性?

时间:2018-05-05 14:23:56

标签: javascript 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>

2 个答案:

答案 0 :(得分:1)

您的response不是数组(!) - 所以为什么U用它并将其索引为数组

你应该这样做:

response['persons'][0].emotion

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

答案 1 :(得分:1)

尝试访问persons,然后访问emotionpersons键的值是一个数组。假设response只有一个key persons,请使用00索引中获取元素

response.persons [0] .emotion