我有一个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++;
});
});
我应该在这里调查除了每个()以外的东西,还是应该使用完全不同的方法?
谢谢
答案 0 :(得分:1)
执行$.each
的正确方法是这样的:
var myObj = {...};
$.each(myObj, function(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);