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);
});
});