2

我有一个 JSON 对象,我用 each() 循环将表行添加到表中。我无法确保 JSON 数组中呈现的数据的完整性,并且偶尔会遇到一些 NULL。

例如:

// A GOOD ARRAY 
{
id: "193",
location: {
city: "Atlanta",
state: "GA"
},
name: "John"
},
// NOW WE STUMBLE UPON A BAD ARRAY WITH A NULL
{
id: "194",
location: {
city: "Boise",
state: null
},
name: "Frank"
},
{...}

现在,当我处理没有 NULL 值的 JSON 对象时,each() 循环没有问题。一旦我在数组中的任何地方遇到一个为 NULL 的成员,循环就会中断。

这就是我循环的方式:

$.getJSON("/getstuff/jsonprovider.php", function (data) {

        var results = data.parentnode;

        var tableThing = $(".myTable tbody");
            var i = 0;

        $.each(results, function () {
                tableThing.append('<tr><td></td><td>' + results[i].id + '</td><td>' + results[i].name + '</td><td>' + results[i].location.city + ', ' + results[i].location.state + '</td></tr>');
        i++;
        });

        });

我应该在这里调查 each() 以外的东西,还是应该使用完全不同的方法?

谢谢

4

2 回答 2

1

正确的做法$.each是这样的:

var myObj = {...};
$.each(myObj, function(k, v){ 
    //..
});

您需要上面的两个参数:

  • k 保存索引或键
  • v 保存该索引或键处的值

如果您要使用计数器变量i,不妨使用 JavaScriptfor in循环:

for(var i in myObj){
   //..
}
于 2012-07-18T20:20:40.547 回答
1

由于您的数据可能包含空值,因此您需要在尝试使用数据之前确保数据存在。只使用.append一次也更有效率。下面我使用默认的空对象和 $.extend 深拷贝来确保我们从中提取数据的对象始终定义了所有数据值,即使该值不在 json 中。我仍然不确定此时将如何处理空值。

var emptyObj = {
    id: "",
    name: "",
    location: {
        city: "",
        state: ""
    }
},htmlToAppend = "";

$.each(results, function (i,obj) {
    var newObj = $.extend(true,{},emptyObj,obj);
    htmlToAppend += '<tr><td></td><td>' + newObj.id + '</td><td>' + newObj.name + '</td><td>' + newObj.location.city + ', ' + newObj.location.state + '</td></tr>';
});
tableThing.append(htmlToAppend);
于 2012-07-18T20:23:40.737 回答