$.each を使用して Json データを jQuery でループする 質問する

$.each を使用して Json データを jQuery でループする 質問する

data という変数に次の JSON が返されます。

返される JSON は次のとおりです...

[ 
{"Id": 10004, "PageName": "club"}, 
{"Id": 10040, "PageName": "qaz"}, 
{"Id": 10059, "PageName": "jjjjjjj"}
]

$.each を使用してコレクションをループしようとしていますが、アラートに undefined が表示される問題が発生しています。さまざまな構文を試しましたが、解決方法がわかりません。

私が使用しているJQueryは

$.each(data, function(i, item) {
    alert(item.PageName);
});

誰か私に正しい方向を指し示してくれませんか?

編集これはデータを取得するために使用しているコードです

$.getJSON('/Cms/GetPages/123', null, function(data) {
  fillSelect(data);
});

これはコールバック時に呼び出される関数です

function fillSelect(data) {
  alert(data);
  $.each(data, function(i, item) {
    alert(item.PageName);
  });
}

編集2これは少し混乱を招きます。ドキュメントによると、私の場合、このように動作するはずですが、動作しません。Fiddler によると、ヘッダーには次のように表示されます:-

Content-Type: application/json; charset=utf-8

そして、JSON は上記のとおり正確です。違いが出るかどうかはわかりませんが、私は Chrome を使用しています。IE と FF でテストします...

編集3

$.getを使用すると

"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10056,\r\n \"PageName\": \"fdgdfgdfg\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10052,\r\n \"PageName\": \"hjkhjk\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10059,\r\n \"PageName\": \"jjjjjjj\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10057,\r\n \"PageName\": \"qqqqq\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10054,\r\n \"PageName\": \"qwqw\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n }\r\n]"

ベストアンサー1

var data = [ 
 {"Id": 10004, "PageName": "club"}, 
 {"Id": 10040, "PageName": "qaz"}, 
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data, function(i, item) {
    alert(data[i].PageName);
});

$.each(data, function(i, item) {
    alert(item.PageName);
});

次のような場合を除き、これら 2 つのオプションは適切に機能します。

var data.result = [ 
 {"Id": 10004, "PageName": "club"}, 
 {"Id": 10040, "PageName": "qaz"}, 
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data.result, function(i, item) {
    alert(data.result[i].PageName);
});

編集:

これを試してみて、その結果を説明します

$.get('/Cms/GetPages/123', function(data) {
  alert(data);
});

編集3:

これにより問題は修正されますが、「eval」を使用するという考えは正しくありません。'/Cms/GetPages/123' の応答がどのようになっているかを確認する必要があります。

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });
});

おすすめ記事