我的想法是我调用REST API,返回一个JSON数组,然后将该数组构建到表中。
当API调用返回数组时,它将所有内容包装在“result”对象中,这使我很难实际访问数组中的任何内容。有没有办法剥离“结果”层,以便我实际上能够做我需要做的事情。
目前,调用类似obj.result
的内容会返回undefined,其中obj是我从API获得的响应的JSON.parse
版本。
我已经包含了一个返回响应的片段,以及我用来尝试处理它的代码。
{
"result": [{
"incident_state": "7",
"short_description": "question about 1010 EB1",
"number": "INC1785295"
}, {
"incident_state": "7",
"short_description": "Software Update",
"number": "INC1785559"
}, {
"incident_state": "7",
"short_description": "RI 113 - Not Displaying Laptop VGA",
"number": "INC1785587"
}, {
"incident_state": "7",
"short_description": "[HD] SAS 2229: Lectern PC",
"number": "INC1785640"
}, {
"incident_state": "7",
"short_description": "SAS 2229",
"number": "INC1785644"
}, {
"incident_state": "7",
"short_description": "Aerial Email Manager: BU 2111: Lectern PC Down",
"number": "INC1785671"
}, {
"incident_state": "7",
"short_description": "Burlington Labs 2111",
"number": "INC1785673"
}, {
"incident_state": "7",
"short_description": "EB3 2207: Training Request",
"number": "INC1785703"
}, {
"incident_state": "7",
"short_description": "BU 2111: Lectern PC",
"number": "INC1785759"
}, {
"incident_state": "7",
"short_description": "[RC] SAS 1220: Telephone",
"number": "INC1785812"
}, ]
}
var response = null;
function getAction(){
document.getElementById("expanded").innerHTML = "Calling...";
var client=new XMLHttpRequest();
client.open("GET","https://demo.service-now.com/api/now/v1/table/incident?sysparm_fields=short_description,number,incident_state");
client.setRequestHeader('Accept','application/json');
client.onreadystatechange = function(){
if(this.readyState = this.DONE){
document.getElementById("expanded").innerHTML = "";
response = this.response;
alert("API Call Completed, awaiting processing.");
//document.getElementById("response").innerHTML = this.response;
}};
client.send();
}
function processData(){
var obj = JSON.parse(response);
for(var i = 0; i < obj.result.length; i++) {
document.getElementById("expanded").innerHTML = obj.result[0][i];
}
document.getElementById("response").innerHTML = JSON.stringify(obj);
}
编辑:
我忘了把它包含在我的HTML页面上,有一个按钮来调用getAction(),然后一旦它结束,就会有一个按钮来调用processData()。
答案 0 :(得分:1)
实际上你是在循环json数组的元素,但是你试图访问错误的属性或错误的值。
正如评论中提到的那样,obj.result[0][i]
总是试图从数组中的第一个对象获取索引为i
的元素。
尝试改变它:
obj.result[i].someProperty
或者也许:
obj.result[i]["someKey"]
修改强>
另请注意,if条件不是corerct,因为您不在此处进行比较:
if(this.readyState = this.DONE)
您应该使用==
进行比较,因为=
用于分配。
答案 1 :(得分:0)
正如@open and free
提到的,这是一个JSON.parse问题...删除数组中的最后一个逗号char,它可以正常工作