pętla jquery na danych Json przy użyciu $.każdy

Mam następujący JSON zwrócony w zmiennej o nazwie data.

TO JEST JSON, KTÓRY ZOSTANIE ZWRÓCONY...

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

I próbuję zapętlić kolekcję za pomocą $.każdy, ale mam problemy, w których alert pokazuje niezdefiniowany. Próbowałem wielu różnych składni, ale nie mogę tego zrozumieć.

JQuery, którego używam to

$.each(data, function(i, item) {
    alert(item.PageName);
});
Czy ktoś może wskazać mi właściwy kierunek?

Edytuj To jest kod I używam do przechwytywania danych

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

I jest to funkcja, która jest wywoływana po wywołaniu

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

Edycja 2 Trochę mnie to myli, według dokumentów powinno działać tak jak ja to mam, ale tak nie jest. według fiddlera nagłówek pokazuje: -

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

I JSON jest dokładnie poprawny powyżej. Używam chrome, jeśli to coś zmieni. Przetestuje w IE i FF....

EDIT 3

Użycie $.get produces

"[\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]"
Author: Cœur, 2010-02-26

3 answers

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

Te dwie opcje działają dobrze, chyba że masz coś takiego:

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:

Spróbuj z tym i opisuje, jaki wynik

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

DO EDYCJI 3:

To naprawia problem, ale nie pomysł, aby użyć "eval", powinieneś zobaczyć, jak są odpowiedzi w '/ Cms / GetPages / 123'.

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });​
});
 275
Author: andres descalzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-26 16:32:21

Czy przekonwertowałeś dane z string do JavaScript object?

Możesz to zrobić z data = eval('(' + string_data + ')'); lub, co jest bezpieczniejsze, data = JSON.parse(string_data); ale później będzie działać tylko w FF 3.5 lub jeśli włączysz json2.js

JQuery od 1.4.1 mają również funkcję, $.parseJSON().

Ale tak naprawdę, $.getJSON() powinno dać ci już parsowany obiekt json, więc powinieneś dokładnie wszystko sprawdzić, gdzieś jest mały błąd, jakbyś zapomniał coś zacytować w json lub brakuje jednego z nawiasów.

 16
Author: vava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-26 15:40:49

GetJSON oceni dane do JSON dla Ciebie, o ile używany jest prawidłowy typ zawartości. Upewnij się, że serwer zwraca dane jako application / json.

 4
Author: kgiannakakis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-26 15:05:07