0

サーバーから次のjson応答があります。

  $data=[[

    {"left":{"p1":{"x":0,"y":0},"p2":{"x":0,"y":15}},
     "right":{"p1":{"x":15,"y":0},"p2":{"x":15,"y":15}},
     "up":{"p1":{"x":0,"y":0},"p2":{"x":15,"y":0}},
     "bottom":{"p1":{"x":0,"y":15},"p2":{"x":15,"y":15}}},

    {"left":{"p1":{"x":0,"y":15},"p2":{"x":0,"y":30}},
     "right":{"p1":{"x":15,"y":15},"p2":{"x":15,"y":30}},
     "up":{"p1":{"x":0,"y":15},"p2":{"x":15,"y":15}},
     "bottom":{"p1":{"x":0,"y":30},"p2":{"x":15,"y":30}}}

    ],
[

{"left":{"p1":{"x":0,"y":0},"p2":{"x":0,"y":15}},
 "right":{"p1":{"x":15,"y":0},"p2":{"x":15,"y":15}},
 "up":{"p1":{"x":0,"y":0},"p2":{"x":15,"y":0}},
 "bottom":{"p1":{"x":0,"y":15},"p2":{"x":15,"y":15}}},

{"left":{"p1":{"x":0,"y":15},"p2":{"x":0,"y":30}},
 "right":{"p1":{"x":15,"y":15},"p2":{"x":15,"y":30}},
 "up":{"p1":{"x":0,"y":15},"p2":{"x":15,"y":15}},
 "bottom":{"p1":{"x":0,"y":30},"p2":{"x":15,"y":30}}}

]
]

左の p1 ポイントの x ごとに警告したいと思います。

$.getJSON("jetData",
          function(data) {
      $.each(data, function(i,item){
          alert(data[i].left.p1.x);

        }); 
      });

私は得ています

Uncaught TypeError: Cannot read property 'p1' of undefined 

どうすれば正しいですか?

アップデート:

申し訳ありませんが、間違った例を投稿しました。2x2 行列について話していることに気付くのに少し時間がかかりました。そのため、2 つのループで値を出力する必要があります。

4

2 に答える 2

1

さて、あなたのデータは配列構造に二重に囲まれています。それには、それを反復処理するために使用する必要がありますdata[0][i].left.p1.x(または、よりスマートなもの-何がどのようにシリアル化されているかについての詳細情報がないとわかりにくい)。

于 2012-07-04T22:45:01.573 に答える
1

更新された質問では、外側と内側のループの両方をループするネストされたループが必要です。

$.getJSON("jetData", function(data) {
   $.each(data, function(i,item) {
       $.each(item, function(j, inner_item) {
           alert(inner_item.left.p1.x);
        // alert(data[i][j].left.p1.x);  // same thing
       });
   }); 
});

2 つの外側の配列があります。

これを変える...

$.each(data, function(i,item){

これに...

$.each(data[0], function(i,item){

...つまり$.each、オブジェクトを直接含む配列を反復しています。


直接関係ないけどこれ…

alert(data[i].left.p1.x);

このように書くことができます...

alert(item.left.p1.x);

同じことですが、少し短くなります。

于 2012-07-04T22:45:10.750 に答える