我正在尝试使用jQuery进行测验,并从外部Json文件中提取问题和答案。
我的问题是我的foreach循环只打印出Json项目中的最后一个元素。
这是我的Jquery:
function postData(data) {
var html = "";
$.each(data, function(key, value) {
html += "<ul><h3><span>" + key + "</span></h3>";
$.each(value.answers, function(i, j){
html += "<li>" + j.answer + "</li>";
});
html += "</ul>";
});
$('#content').append(html);
};
我的Json文件中的数据示例是:
{
"Question Title":
{
"answers":
[{
"answer" : "answer one",
"answer" : "answer two",
"answer" : "answer three",
"answer" : "answer four"
}]
},
"Question title two":
{
"answers":
[{
"answer" : "True",
"answer" : "False"
}]
}
}
然而,我得到的唯一答案是:
Question title
- answer 4
Question title two
- False
我只是奇怪地尝试循环它们,还是我没有正确打印对象?
如果您需要我澄清任何事情,请告诉我。谢谢。
答案 0 :(得分:5)
您的JSON在同一对象中存在重复的属性名称存在缺陷。而不是:
[{
"answer" : "answer one",
"answer" : "answer two",
"answer" : "answer three",
"answer" : "answer four"
}]
你想要这个每个答案属性都在它自己的对象中:
[
{"answer" : "answer one"},
{"answer" : "answer two"},
{"answer" : "answer three"},
{"answer" : "answer four"}
]
就像你拥有它一样,你是同一个对象中的重复属性名,它只给你最后一个属性的结果,实际上是严格模式下的错误(使用严格模式的另一个原因),因为解释器会标记这个错误适合你。
工作演示:http://jsfiddle.net/jfriend00/zesmjgq7/
您可能还应该修复HTML,因为只有少数<ul>
<li>
,<ul>
和<ol>
的有效子对象和{{1}不是合法的孩子。您可以将<h3>
放在<h3>
之前,如下所示:
<ul>
答案 1 :(得分:0)
更改了答案对象
中的键名称{
"Question Title":
{
"answers":
[{
"answer1" : "answer one",
"answer2" : "answer two",
"answer3" : "answer three",
"answer4" : "answer four"
}]
},
"Question title two":
{
"answers":
[{
"answer1" : "True",
"answer2" : "False"
}]
}
};