Mam następujący kod JSON zwrócony w zmiennej o nazwie data.
TO JEST ZWRACANY JSON ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
i próbuję przeglądać kolekcję przy użyciu $ .each, ale napotykam problemy, w których alert jest niezdefiniowany. Próbowałem wielu różnych składni, ale nie mogę tego rozgryźć.
JQuery, którego używam, to
$.each(data, function(i, item) {
alert(item.PageName);
});
Czy ktoś może wskazać mi właściwy kierunek?
EDYCJA To jest kod, którego używam do pobierania danych
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
i jest to funkcja wywoływana po oddzwonieniu
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
EDYCJA 2 To jest trochę mylące, zgodnie z dokumentacją powinno działać tak, jak mam, ale tak nie jest. Według skrzypka nagłówek pokazuje: -
Content-Type: application/json; charset=utf-8
a JSON jest dokładnie poprawny powyżej. Używam chromu, jeśli to robi coś innego. Będzie testować w IE i FF ....
EDYCJA 3
używając $ .get produkuje
"[\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]"
Odpowiedzi:
te dwie opcje działają dobrze, chyba że masz coś takiego:
EDYTOWAĆ:
spróbuj z tym i opisz, jaki jest wynik
DLA EDYCJI 3:
to rozwiązuje problem, ale nie pomysł użycia „eval”, powinieneś zobaczyć, jaka jest odpowiedź w '/ Cms / GetPages / 123'.
źródło
eval(data)
$.get
produkujeCzy przekonwertowałeś dane z ciągu znaków na obiekt JavaScript?
Możesz to zrobić za pomocą
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 dołączysz json2.jsjQuery 1.4.1 ponieważ mają również funkcję, że
$.parseJSON()
.Ale tak naprawdę,
$.getJSON()
powinieneś dać ci już przeanalizowany obiekt json, więc powinieneś po prostu dokładnie sprawdzić wszystko, gdzieś jest mały błąd, jakbyś zapomniał zacytować coś w json lub brakuje jednego z nawiasów.źródło
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. Ponadto jQuery ma inną funkcjędata = jQuery.parseJSON(string_data);
eval(data)
działa tylko . Proszę zobaczyć mój EDIT 2getJSON oceni dane do formatu JSON za Ciebie, o ile zostanie użyty prawidłowy typ zawartości. Upewnij się, że serwer zwraca dane jako application / json.
źródło
Content-Type: application/json; charset=utf-8
źródło