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>
解决方案
你response
不是数组(!) - 那么为什么你像数组一样使用和索引它
你应该这样做:
response['persons'][0].emotion
并且不要在 for 循环中硬编码上索引:for (var i = 0; i < 1; i++)
。
推荐阅读
- gsoap - gsoap 添加“custom/chrono_time_point.h”“警告”:缺少 ';' 或指定的类型无效
- docker - 如何在不干扰测试的情况下使用无头 Chrome 开发人员工具查看量角器进度?
- ios - 广度优先搜索:找不到路径,二维数组中到边界的最短路径
- c# - 防止移动项目在共享项目中使用某些 .cs 文件
- java - Java ArrayList 相同的字符串分组并获取最频繁的String
- amazon-s3 - 从 S3 读取 yaml 属性文件
- sql - 在同一个查询中运行多个命令有什么不好
- java - 如何使用移动/OTP 绕过 Keycloak 的用户名/密码身份验证
- android-studio - 我无法将我的项目同步到 gradle,出现此错误“添加 google Maven 存储库并同步项目”
- function - Cplex 是否支持对决策变量使用 ln 或指数函数?