2012-07-18 74 views
2

我有一個JSON對象,我循環每個()將錶行添加到表。我無法確保JSON數組中呈現的數據的完整性,偶爾會遇到一些NULL。jQuery each()打破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對象,每個()沒有問題遍歷。只要我在數組中的任何地方遇到一個具有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++; 
     }); 

     }); 

我應該調查其他每個比這裏的東西(),或者我應該用完全不同的方法?

謝謝

+1

您的鑰匙不應該放在引號中嗎? – 2012-07-18 19:59:36

+0

它們是否不在引號中並不重要,但將它們放在引號內被認爲是一種好的做法。 – emphaticsunshine 2012-07-18 20:02:11

+0

顯示你的代碼... – ocanal 2012-07-18 20:02:11

回答

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

我想將這個因素考慮在內以滿足我的需求,但我錯過了一些東西......只有在你處理一個對象而不是一個數組的時候,重新調整「空」對象http://jsfiddle.net/HCbsM/4/ – 2012-07-18 20:50:09

+0

。嘗試這一個:http://jsfiddle.net/HCbsM/6/ – 2012-07-18 20:52:51

+0

凱文...所有殺手...沒有填充。謝謝 – 2012-07-18 20:59:58

1

正確的方法做$.each是這樣的:

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

您需要兩個以上參數:

  • ķ中包含索引或鍵
  • v保存該索引或密鑰的值

如果你打算使用一個計數器變量像i你還不如用JavaScript的for in循環:

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