Jquery loop on Json data с использованием $.each
У меня есть следующий JSON, возвращаемый в переменную с именем data.
ЭТО ИСКУССТВО, КОТОРАЯ ВОЗВРАЩАЕТСЯ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
и я пытаюсь выполнить цикл через коллекцию с помощью $.each, но я столкнулся с проблемами, в которых отображается предупреждение undefined. Я пробовал много разных синтаксисов, но не могу понять этого.
JQuery, который я использую,
$.each(data, function(i, item) {
alert(item.PageName);
});
Может ли кто-нибудь указать мне в правильном направлении?
ИЗМЕНИТЬ
Это код, который я использую для захвата данных.
$.getJSON('/Cms/GetPages/123', null, function(data) {
fillSelect(data);
});
и это функция, вызываемая при обратном вызове
function fillSelect(data) {
alert(data);
$.each(data, function(i, item) {
alert(item.PageName);
});
}
РЕДАКТИРОВАТЬ 2
Это немного сбивает меня с толку, согласно документам, он должен работать так, как я, но это не так. По словам скрипача, заголовок показывает: -
Content-Type: application/json; charset=utf-8
и JSON точно верна выше. Я использую хром, если это делает что-то другое. Будет проверяться в IE и FF....
РЕДАКТИРОВАТЬ 3
с использованием $.get производит
"[\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]"
Ответы
Ответ 1
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);
});
эти два варианта работают хорошо, если у вас нет чего-то вроде:
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);
});
РЕДАКТИРОВАТЬ:
попробуй с этим и опиши каков результат
$.get('/Cms/GetPages/123', function(data) {
alert(data);
});
ДЛЯ РЕДАКТИРОВАНИЯ 3:
это исправляет проблему, но не идею использовать "eval", вы должны увидеть, как выглядит ответ в "/Cms/GetPages/123".
$.get('/Cms/GetPages/123', function(data) {
$.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
alert(item.PageName);
});
});
Ответ 2
Вы преобразовали свои данные из строки в объект JavaScript?
Вы можете сделать это с помощью data = eval('(' + string_data + ')');
или, что безопаснее, data = JSON.parse(string_data);
, но позже будет работать только в FF 3.5 или если вы включите json2.js
jQuery, так как 1.4.1 также имеет функцию для этого, $.parseJSON()
.
Но на самом деле, $.getJSON()
должен дать вам уже разобранный json-объект, так что вы должны просто тщательно проверить все, где-то где-то где-то где-то есть ошибка, например, вы могли забыть что-то процитировать в json, или отсутствует один из скобок,
Ответ 3
getJSON будет оценивать данные для JSON для вас, если используется правильный тип контента. Убедитесь, что сервер возвращает данные как application/json.
Ответ 4
$.each(JSON.parse(result), function(i, item) {
alert(item.number);
});