$ .each kullanarak Json verileri jquery döngü


160

Aşağıdaki JSON veri adlı bir değişken döndürdü var.

BU GERİ DÖNEN JSON ...

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

ve $ .each kullanarak toplama döngü için çalışıyorum ama uyarı undefined gösteren sorunlara çalışıyorum. Bir çok farklı sözdizimi denedim ama bunu anlayamıyorum.

Kullandığım JQuery

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

Biri beni doğru yönde gösterebilir mi?

EDIT Bu veri kapmak için kullanıyorum kodu

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

ve bu geri arama üzerine çağrılan işlev

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

DÜZENLEME 2 Bu biraz kafa karıştırıcı, belgelere göre sahip olduğum gibi çalışması gerekiyor, ama çalışmıyor. Kemancıya göre başlık şunları gösterir: -

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

ve JSON yukarıda tam olarak doğrudur. Bu farklı olursa, krom kullanıyorum. IE ve FF'de test edecek ....

DÜZENLEME 3

$ .get kullanarak üretir

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

Benim için çalışıyor. Verilerin her yönteme doğru bir şekilde iletildiğinden emin olun.
kgiannakakis

Yanıtlar:


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

Bu iki seçenek, aşağıdakine benzer bir şeye sahip olmadığınız sürece iyi çalışır:

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

DÜZENLE:

bununla deneyin ve sonucun ne olduğunu açıklayın

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

DÜZENLEME 3 İÇİN:

bu sorunu düzeltir, ancak "eval" kullanma fikrini değil, '/ Cms / GetPages / 123' içindeki yanıtın nasıl olduğunu görmelisiniz.

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

1
Görünüşe göre eval(data)
eklemem

jQuery'deki "httpData" işlevinde json verileri için çağrılan bir pencere ["eval"] görebilirsiniz. eval kullanmanıza gerek yoktur. bu satır "$. get ('/ Cms / GetPages / 123'" size "veri" ile gelenleri göstermek içindir.
andres descalzo


Güncellenmiş cevabım var olduğunu göstermek için (EDIT 3 bakınız) $.getüretir
Rippo

"/ Cms / GetPages / 123" içindeki verileri nasıl geri veriyorsunuz?
andres descalzo

17

Verilerinizi dizeden JavaScript nesnesine dönüştürdünüz mü?

Bunu data = eval('(' + string_data + ')'); daha güvenli olan veya ile yapabilirsiniz , data = JSON.parse(string_data);ancak daha sonra yalnızca FF 3.5'te veya json2.js'yi eklerseniz çalışır

1.4.1'den beri jQuery de bunun için bir işleve sahiptir $.parseJSON().

Ama aslında, $.getJSON()size zaten ayrıştırılmış json nesnesini vermelisiniz, bu yüzden her şeyi iyice kontrol etmelisiniz, json'da bir şey teklif etmeyi unutmuş olabilirsiniz veya parantezlerden biri eksik.


Görünüşe göre fillselect(eval(data));
eklemem

BTW ne kadar uyumlu eval?
Rippo

3
Öyle olmalı data = eval('('+string_data+')');. Ayrıca, jQuery başka bir işlevi vardırdata = jQuery.parseJSON(string_data);
Greg

Tam olarak doğru olmayan bir şey var. sadece eval(data)çalışır. Lütfen EDIT 2
Rippo

2
JQuery.parseJSON (string_data) veri = eval ('(' + 'string_data +') ') iyi çalışıyor, bazı durumlarda başarısız gördüm.
Dominik Ras

5

getJSON, doğru içerik türü kullanıldığı sürece verileri sizin için JSON'a göre değerlendirir. Sunucunun verileri application / json olarak döndürdüğünden emin olun.


1
kemancı göre içerik türüContent-Type: application/json; charset=utf-8
Rippo

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.