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]"
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);
});
});
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.
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.
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