我从API调用获得如下的HTTP响应。我只需要将名称存储在一个数组中。
{
"results":[
{"name":"First","venue":{"zip":"90405","country":"US"},"desc":"1D"},
{"name":"Second","venue":{"zip":"89065","country":"US"},"desc":"2D"},
{"name":"Third","venue":{"zip":"92352","country":"US"},"desc":"3D"}
],
"meta":{"next":"xxxx","url":"yyyy"}
}
我写了下面的代码,不知道出了什么问题。请帮忙。
<!DOCTYPE html>
<html>
<body>
<div id="id01"></div>
<div id="id02"></div>
<script>
var xmlhttp = new XMLHttpRequest();
var url = ".....";
xmlhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
document.getElementById("id01").innerHTML = this.responseText;
// here its not printing the responseText as expected.?????
var myArr = JSON.parse(this.responseText);
myFunction(myArr);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
console.log(xmlhttp.status);
console.log(xmlhttp.statusText);
function myFunction(arr)
{
var out = "";
var i;
for(i = 0; i < arr.length; i++)
{
out += arr["results"].[i].name; // ????
}
document.getElementById("id01").innerHTML = out;
document.write(out);
}
</script>
</body>
</html>
所以我在两行中遇到问题,如代码中的问号所示,并且明白我正在犯大错。我是网络技术的初学者,如果有任何人可以帮助我如何打印响应文本和存储/打印名称来自http响应,如果是那种格式,我将不胜感激。
答案 0 :(得分:0)
您的JSON响应是Object
,有两个属性,第一个是results
,它是对象数组,第二个是meta
,它是对象。
现在您正在尝试循环对象数组,因此for循环中的条件必须更改为
for(i = 0; i < arr.results.length; i++)
这里我们检查Objects results
属性的长度,该属性是对象数组。
要获取循环中的每个迭代对象,您必须使用带有索引值的[ ]
..现在您还需要一个额外的.
。
out += arr["results"][i].name;
arr["results"]
将指向数组,[i]
将访问给定索引中的对象(i的值)
答案 1 :(得分:0)
这是一个有效的版本:
<!DOCTYPE html>
<html>
<body>
<div id="id01"></div>
<div id="id02"></div>
<script>
var responsetext = "{ \"results\":[ {\"name\":\"First\",\"venue\":{\"zip\":\"90405\",\"country\":\"US\"},\"desc\":\"1D\"}, {\"name\":\"Second\",\"venue\":{\"zip\":\"89065\",\"country\":\"US\"},\"desc\":\"2D\"}, {\"name\":\"Third\",\"venue\":{\"zip\":\"92352\",\"country\":\"US\"},\"desc\":\"3D\"} ], \"meta\":{\"next\":\"xxxx\",\"url\":\"yyyy\"}}";
var myArr = JSON.parse(responsetext);
myFunction(myArr);
function myFunction(arr)
{
var out = "";
var i;
for(i = 0; i < arr.results.length; i++)
{
out += arr.results[i].name;
}
document.getElementById("id01").innerHTML = out;
document.write(out);
}
</script>
</body>
</html>
您需要引用arr.results.length
(因为数组位于对象的结果键中),而且它是arr["results"][i].name
,或者(更好)arr.results[i].name
。
希望它有所帮助: - )
答案 2 :(得分:0)
根据您的要求,您必须将名称存储在数组中。 将您的http响应存储在变量myArr中。
myFunction(myArr); //Out put in console ["First", "Second", "Third"]
function myFunction(arr)
{
var resultarr = arr.results;
var out = [];
for(var i = 0; i < resultarr.length; i++) {
var obj = resultarr[i];
out.push(obj.name);
}
document.getElementById("id01").innerHTML = out;
document.write(out);
}
答案 3 :(得分:0)
尝试这种简单方法:
JSON:
var Obj = {
"results":[
{"name":"First","venue":{"zip":"90405","country":"US"},"desc":"1D"},
{"name":"Second","venue":{"zip":"89065","country":"US"},"desc":"2D"},
{"name":"Third","venue":{"zip":"92352","country":"US"},"desc":"3D"}
],
"meta":{"next":"xxxx","url":"yyyy"}
};
使用数组映射方法:
var result = Obj.results.map(function(a) {return a.name;});
console.log(result);
使用for in循环:
var arrayObj = [];
for (var i in Obj.results) {
arrayObj.push(Obj.results[i].name);
}
console.log(arrayObj);
输出 ["First", "Second", "Third"]