我正在尝试编写一个脚本,该脚本通过AJAX请求返回的JSON数组进行迭代。我希望它遍历每个键(字符串)和值(布尔值),然后将一个CSS类添加到ID与键名称匹配的对象中。
由于数组是3D,因此实际值落在“框”子数组下。
我成功地从服务器取回了JSON,尝试并对其进行迭代时会出现问题;我可以获取“过期”变量的值,但不能获取其他任何值。
来自服务器的JSON:
{
"expired": false,
"boxes": {
"read_curriculum__c": false,
"update_salesforce__c": false,
"slack_add__c": true,
"orientation__c": false,
"survey__c": true
}
}
在页面上:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
if (xmlhttp.status == 200) {
console.log(xmlhttp.responseText);
var responseObj = JSON.parse(xmlhttp.responseText);
if(responseObj.expired == false)
{
for(var i = 0; i < responseObj.boxes.length; i++) // Take however many items are in the boxes array.
{
if(responseObj.boxes[i] == true) //Go through each one and check if it's true
{
var element = getElementById(responseObj.boxes[i]); //Select the element on the page with the same ID
element.classList.add("true"); //Add the class 'true'
}
}
}
}
};
xmlhttp.open("GET", "/onboard/onboard.php?function=fetch", true);
xmlhttp.send();
我尝试过的所有变体都会给我“未定义”或“对象”。我也在努力找出如何将键与值分开的方法。任何帮助表示赞赏。
答案 0 :(得分:1)
这不是一个数组,它只是一个对象,其中嵌套了另一个对象。您可以使用for (var i in object)
遍历对象的键。
if(!responseObj.expired)
{
for(var i in responseObj.boxes)
{
if(responseObj.boxes[i]) //Go through each one and check if it's true
{
var element = getElementById(i); //Select the element on the page with the same ID
element.classList.add("true"); //Add the class 'true'
}
}