jQuery为JSON数组中的对象加载.each

时间:2012-12-19 17:13:17

标签: jquery ajax json

我正在尝试为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时,它只会吐出一个条目。

5 个答案:

答案 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);
    })
});

fiddle

编辑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