0

単なる「データ」ではないJSONパケットがあります-それに関連付けられたメタデータがあります-しかし、それを参照できないようです...

これがどのように見えるかです(JSON)

{ "count":"4",
  "companies": [
{ "id":"1", "company":"Acme", "address":"1234 street st.", "city":"New York", "state":"NY", "zip":"02123", "phone":"212-222-2222", "contact":"Billy Bob", "email":"bb@ny.com", "jobscurrent":"12", "jobsdone":"11" },
{ "id":"3", "company":"Acme", "address":"1234 street st.", "city":"New York", "state":"NY", "zip":"02123", "phone":"212-222-2222", "contact":"Billy Bob", "email":"bb@ny.com", "jobscurrent":"12", "jobsdone":"11" },
{ "id":"4", "company":"Acme", "address":"1234 street st.", "city":"New York", "state":"NY", "zip":"02123", "phone":"212-222-2222", "contact":"Billy Bob", "email":"bb@ny.com", "jobscurrent":"12", "jobsdone":"11" },
{ "id":"5", "company":"Acme", "address":"1234 street st.", "city":"New York", "state":"NY", "zip":"02123", "phone":"212-222-2222", "contact":"Billy Bob", "email":"bb@ny.com", "jobscurrent":"12", "jobsdone":"11" }
] }

これが私のjQueryの外観です...ネストされた「それぞれ」-最初のもの(私の理解です)は{count、companies}をループしており、内部にネストされているものはcustomers配列の各配列をループしています....

2番目のものは正常に動作しています(最初のものの中にネストしなくても正常に動作します-ただし、「n個のレコードを表示する」などの何かを返す必要があります-しかし、現在、「value.count」

items.push('<tr class=""><td colspan="11">' + value.count + '</td></tr>' );

「未定義」を返します

うーん!-そして、それが私の出力を2回与えていることに気づきました...これは予想されることです-外側のループの反復ごとに1回-2つの要素があるため

問題は、メタデータを一度参照するにはどうすればよいかということです...明らかに、そのためにEACHを使用するつもりはありません..

それを参照するために「data.count」だけを試しましたが、何も得られませんでした。そのため、JSON変数を抽出する「EACH」方法に行きました...

function loadTable() {
    $.ajax({
        type: 'POST',   
        url: 'company_list.php',    
        dataType: 'json',   
        success: function ( data ) {                
            var items = [];
            var line = 1;

            $.each( data, function ( key, value ) {
                // meta data
                items.push('<tr class=""><td colspan="11">' + value.count + '</td></tr>' );

                // the real data
                $.each( data.companies, function ( key, value ) {   
                    var thisRowClass = 'odd';
                    if ( line % 2 ) {
                        thisRowClass = 'even';
                    }
                    items.push('<tr class="' + thisRowClass + '"><td>'  + value.company + 
                               '</td><td>' + value.address + 
                               '</td><td>' + value.city + 
                               '</td><td>' + value.state + 
                               '</td><td>' + value.zip + 
                               '</td><td>' + value.phone + 
                               '</td><td>' + value.contact + 
                               '</td><td>' + value.email + 
                               '</td><td>' + value.jobscurrent + 
                               '</td><td>' + value.jobsdone + 
                               '</td><td> edit | delete ' +
                               '</td></tr>');   
                    line++;
                }); 
            });

            //$( '#message' ).html( '<p>Displaying' + value.count + '</p>' );   
            $( '#companies-list' ).append( items.join('') );                                   

        },

        error: function () {    
            // there's an error
            $( '#message' ).html( '<p>There was a problem on the server... </p>' ); 
        }
    });
}
4

1 に答える 1

3

あなたがしたいdata.countのではなくvalue.count

items.push('<tr class=""><td colspan="11">' + data.count + '</td></tr>' );

$.each実際、 JSON の全体構造がこのようになっている場合、outer は必要ないのではないかと思います。言い換えると:

success: function (data) {
    var items = [];
    var line = 1;

    // meta data
    items.push('<tr class=""><td colspan="11">' + data.count + '</td></tr>');

    // the real data
    $.each(data.companies, function (key, value) {
        var thisRowClass = 'odd';
        if (line % 2) {
            thisRowClass = 'even';
        }
        items.push('<tr class="' + thisRowClass + '"><td>' + value.company +
            '</td><td>' + value.address +
            '</td><td>' + value.city +
            '</td><td>' + value.state +
            '</td><td>' + value.zip +
            '</td><td>' + value.phone +
            '</td><td>' + value.contact +
            '</td><td>' + value.email +
            '</td><td>' + value.jobscurrent +
            '</td><td>' + value.jobsdone +
            '</td><td> edit | delete ' +
            '</td></tr>');
        line++;
    });

    //$( '#message' ).html( '<p>Displaying' + value.count + '</p>' );   
    $('#companies-list').append(items.join(''));
};

例: http://jsfiddle.net/gyDMP/1/

于 2013-01-24T03:13:56.423 に答える