2015-02-06 39 views
0

我想用jQuery做一个测验,并从外部Json文件中提取问题和答案。jQuery .each()只打印来自外部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

HTML是无效的,'h3'不能成为孩子'ul' – charlietfl 2015-02-06 06:34:39

回答

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>)的几个有效的子对象和<h3>是不是合法的孩子。你可以把<h3><ul>这样前:

html += "<h3><span>" + key + "</span></h3><ul>"; 
+0

哦,我明白你的意思了。非常感谢你! – user3113376 2015-02-06 06:41:38

+0

@ user3113376 - 请参阅我在最后添加的建议,以使HTML合法。 – jfriend00 2015-02-06 06:42:50

0

改键值名的答案对象

{ 
"Question Title": 
    { 
     "answers": 
      [{ 
      "answer1" : "answer one", 
      "answer2" : "answer two", 
      "answer3" : "answer three", 
      "answer4" : "answer four" 
      }] 
    }, 

"Question title two": 
    { 
     "answers": 
      [{ 
      "answer1" : "True", 
      "answer2" : "False" 
      }] 
    } 
}; 

http://jsfiddle.net/28w23mhh/