2010-02-26 22 views
142

Aşağıdaki JSON veri denen bir değişkende döndüm.

BU

...

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

DÖNDÜ GİRMEKTEDİR JSON IS ve ben $ .each kullanarak topluluk içinde döngü çalışıyorum ama uyarı tanımsız gösteriyor sorunlarla çalıştırıyorum. Birçok farklı sözdizimi denedim, ancak bunu anlayamıyorum.

JQuery ben

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

herhangi bir doğru yönde işaret edebilir edilir kullanıyorum?

DÜZENLEME Bu Verileri

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

kapmak için kullanıyorum kodudur ve bu çağrı geri

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

DÜZENLEME 2 Bu üzerine çağrılan işlevdir biraz kafamı karıştırıyor, dokümanlar göre çalışmam gerekiyor, ama işe yaramıyor. üstbilgi Fiddler'ı göre gösterilmektedir: -

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

ve JSON yukarıda tam olarak doğrudur. Bu farklı olursa, krom kullanıyorum. $ .get kullanarak

DÜZENLEME 3

.... IE ve FF test edecek gibi bir şey olmadığı sürece

"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"\",\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]" 
+0

Benim için çalışıyor. Verilerin her bir yönteme doğru şekilde aktarıldığından emin olun. – kgiannakakis

cevap

252
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, iyi iş üretir:

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ÜZENLEME:

bununla denemek ve EDIT'e 3 İÇİN sonuç ne

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

anlatır: "eval" kullanmak fikri

bu sorunu düzeltir, ancak, ne kadar görmelisiniz '/ Cms/GetPages/123' içindeki yanıt.

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

jQuery'de "httpData" işlevinde "eval (data)" – Rippo

+0

eklemem gerekiyor gibi görünüyor, json verileri için aranan bir pencere ["eval"] görebilirsiniz. eval kullanmanıza gerek yok. Bu satır "$. get ('/ Cms/GetPages/123'", "veri" içinde aldığınızı göstermek içindir. –

+0

http://james.padolsey.com/jquery/#v=1.3.2&fn=jQuery. ajax http://james.padolsey.com/jquery/#v=1.3.2&fn=jQuery.httpData –

15

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

Sen güvenlidir data = eval('(' + string_data + ')'); ya, data = JSON.parse(string_data); ile bunu yapabilir ancak daha sonra sadece olacak FF 3.5 çalışır ya da 1.4.1 beri json2.js

jQuery eklerseniz de, bunun için $.parseJSON() işleve sahiptir.

Ancak, aslında, zaten ayrıştırılmış json nesnesini $.getJSON() vermelisiniz, bu yüzden her şeyi iyice kontrol etmelisiniz, bir yere gömülmüş küçük bir hata var, tıpkı jsonda bir şey yazmayı unutmuş olabileceğiniz gibi, ya da parantezlerden biri eksik. Doğru içerik türü kullanıldığında, verileri sizin için JSON olarak değerlendirecek getJSON,

+0

'fillselect (eval (data)); ' – Rippo

+0

BTW' status' ne kadar uyumlu olduğunu eklemem gerekiyor? – Rippo

+3

Bu, data = eval olmalıdır ('(' + string_data + ')'); '. Ayrıca, jQuery başka bir işlevi vardır 'data = jQuery.parseJSON (string_data);' – Greg

4

. Sunucunun verileri uygulamaya/json olarak döndürdüğünden emin olun.

+1

kemancıya göre içerik türü 'İçerik-Tipi: uygulama/json; karakter kümesi = UTF-8 ' – Rippo