jquery loop pada data Json menggunakan $ .each


160

Saya memiliki JSON berikut dikembalikan dalam data yang disebut variabel.

INI ADALAH JSON YANG MENDAPATKAN ...

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

dan saya mencoba untuk mengulang koleksi menggunakan $ .each tapi saya mengalami masalah di mana peringatan menunjukkan tidak terdefinisi. Saya telah mencoba banyak sintaks yang berbeda tetapi sepertinya tidak bisa memahaminya.

JQuery yang saya gunakan adalah

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

Adakah yang bisa mengarahkan saya ke arah yang benar?

EDIT Ini adalah kode yang saya gunakan untuk mengambil data

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

dan ini adalah fungsi yang dipanggil saat dipanggil kembali

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

EDIT 2 Ini agak membingungkan saya, menurut dokumen itu harus berfungsi seperti yang saya miliki, tetapi tidak. Menurut fiddler tajuknya menunjukkan: -

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

dan JSON tepat di atas. Saya menggunakan chrome jika ini berbeda. Akan menguji di IE dan FF ....

EDIT 3

menggunakan $. dapatkan hasil

"[\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]"

Ini bekerja untuk saya. Pastikan data dikirimkan dengan benar ke setiap metode.
kgiannakakis

Jawaban:


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

dua opsi ini berfungsi dengan baik, kecuali jika Anda memiliki sesuatu seperti:

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

EDIT:

coba dengan ini dan jelaskan apa hasilnya

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

UNTUK EDIT 3:

ini memperbaiki masalah, tetapi bukan gagasan untuk menggunakan "eval", Anda harus melihat bagaimana tanggapan di '/ Cms / GetPages / 123'.

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

1
Sepertinya saya perlu menambahkaneval(data)
Rippo

dalam fungsi "httpData" di jQuery Anda dapat melihat jendela bernama ["eval"] untuk data json. Anda tidak perlu menggunakan eval. baris ini "$. get ('/ Cms / GetPages / 123'" adalah untuk menunjukkan kepada Anda yang menerima di "data".
andres descalzo


Miliki jawaban yang diperbarui (lihat EDIT 3) untuk menunjukkan apa yang $.getmenghasilkan
Rippo

bagaimana Anda mengembalikan data dalam "/ Cms / GetPages / 123"?
andres descalzo

17

Sudahkah Anda mengonversi data dari string ke objek JavaScript?

Anda dapat melakukannya dengan data = eval('(' + string_data + ')'); atau, yang lebih aman, data = JSON.parse(string_data);tetapi nantinya hanya akan berfungsi di FF 3.5 atau jika Anda memasukkan json2.js

jQuery sejak 1.4.1 juga memiliki fungsi untuk itu $.parseJSON(),.

Tetapi sebenarnya, $.getJSON()harus memberi Anda objek json yang sudah diurai, jadi Anda harus memeriksa semuanya dengan teliti, ada sedikit kesalahan yang terkubur di suatu tempat, seperti Anda mungkin lupa mengutip sesuatu di json, atau salah satu tanda kurung tidak ada.


Sepertinya saya perlu menambahkanfillselect(eval(data));
Rippo

BTW seberapa kompatibel eval?
Rippo

3
Itu seharusnya data = eval('('+string_data+')');. Juga, jQuery memiliki fungsi laindata = jQuery.parseJSON(string_data);
Greg

Ada sesuatu yang tidak beres. hanya eval(data)bekerja. Silakan lihat EDIT 2 saya
Rippo

2
Saya telah melihat jQuery.parseJSON (string_data) gagal dalam kasus tertentu, di mana data = eval ('(' + string_data + ')') berfungsi dengan baik.
Dominik Ras

5

getJSON akan mengevaluasi data untuk JSON untuk Anda, asalkan tipe konten yang benar digunakan. Pastikan server mengembalikan data sebagai aplikasi / json.


1
menurut fiddler jenis kontennya adalahContent-Type: application/json; charset=utf-8
Rippo

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.