2

テーブル行をテーブルに追加するために each() でループする JSON オブジェクトがあります。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

データには null が含まれている可能性があるため、使用する前にデータが存在することを確認する必要があります。また、.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);
于 2012-07-18T20:23:40.737 に答える
1

a を行う適切な方法$.eachは次のとおりです。

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

上記の 2 つのパラメーターが必要です。

  • k はインデックスまたはキーを保持します
  • v はそのインデックスまたはキーの値を保持します

カウンター変数を使用する場合は、iJavaScriptfor inループを使用することもできます。

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