jQuery each()打破null

时间:2012-07-18 19:58:41

标签: javascript jquery json

我有一个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++;
        });

        });

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

谢谢

2 个答案:

答案 0 :(得分:1)

执行$.each的正确方法是这样的:

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

您需要以上两个参数:

  • k持有索引或密钥
  • v保存该索引或键的值

如果您打算使用像i这样的计数器变量,您也可以使用JavaScripts for in循环:

for(var i in myObj){
   //..
}

答案 1 :(得分:1)

由于您的数据可能为空,因此在尝试使用数据之前,需要确保数据存在。仅使用.append一次也更有效。下面我使用默认的空对象和$ .extend深层复制,以确保我们从中提取数据的对象始终定义了所有数据值,即使该值不在json中。我还不确定此时将如何处理null。

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);