我正在尝试为JSON数组中的对象编写.each
语句。
$.ajax({
url: url,
dataType: 'json',
success: function(data){
$.each(data, function (key, value){
...do stuff...
}
});
问题是,它只返回一个结果,因为当我需要为.each
内的对象执行data
时,它只为.each
执行data
。我确信它和.each(data.something ...)
一样简单,但我无法弄清楚它是什么。
修改 根据评论请求,数据如下:
[["data1","data2","data3"],
["data1","data2","data3"],
["data1","data2","data3"]
]
EDIT2
这是我工作代码的JSFiddle。如果我将.each
函数更改为只执行alert
它可以正常工作,但是当我尝试构建div时,它只会吐出一个条目。
答案 0 :(得分:1)
我最初建议使用$ .map()来创建数组。
但实际问题是OP在循环的每次迭代中都覆盖了html。编辑我的回复以显示实际答案。
答案:OP需要在.each()循环中将.html()更改为.append()。
答案 1 :(得分:1)
听起来你需要一个嵌套循环:
$.ajax({
url: url,
dataType: 'json',
success: function(data){
$.each(data, function (idx1, value1){
$.each(value1, function (idx2, value2){
//...do stuff...
});
});
});
答案 2 :(得分:1)
your fiddle的问题不在于.each
循环 - 您正在使用.html()
添加代码,这将使用您的新代码替换指定元素中的所有内容
使用.append()
代替.html()
,您应该没问题。
答案 3 :(得分:0)
可能它不是JSON对象,只需执行以下操作
$.each($.parseJSON(data), function (key, value){
... stuff...
}
取决于对象,您应该执行Map:
// Therefore, convert it to a real array
var realArray = $.makeArray( data )
// Now it can be used reliably with $.map()
$.map( realArray, function(val, i) {
// do something
});
编辑 - 小提琴测试
使用您的对象,我们可以检查它是否是嵌套数组,因此您必须对其进行双循环:
var data = [["data1","data2","data3"],
["data1","data2","data3"],
["data1","data2","data3"]
];
$.each(data, function(key, item) {
$.each(item, function(i, val) {
alert(val);
})
});
编辑2 - 适用于您的代码!
$.ajax({
url: url,
dataType: 'json',
success: function(data){
$.each(data, function(key, item) {
$.each(item, function(i, val) {
alert(val);
})
}
}
});
希望它有所帮助!!
答案 4 :(得分:0)
再使用一个循环
$.each(data, function(key, value) {
$.each(value, function(i, val) {
console.log(val)
})
})
<强> Check Fiddle 强>