У меня есть следующий JSON, возвращенный в переменной с именем data.
ЭТО JSON, КОТОРОЕ ВОЗВРАЩАЕТСЯ ...
[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]
и я пытаюсь перебрать коллекцию, используя $ .each, но сталкиваюсь с проблемами, когда предупреждение отображается как неопределенное. Я пробовал много разных синтаксисов, но не могу понять это.
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 Это немного смущает меня, в соответствии с документами, он должен работать, как у меня, но это не так. Согласно Fiddler заголовок показывает:
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]"
Ответы:
эти два варианта работают хорошо, если у вас нет чего-то вроде:
РЕДАКТИРОВАТЬ:
попробуй с этим и опиши каков результат
ДЛЯ РЕДАКТИРОВАНИЯ 3:
это исправляет проблему, но не идею использовать «eval», вы должны увидеть, как выглядит ответ в «/ Cms / GetPages / 123».
источник
eval(data)
$.get
производитВы преобразовали свои данные из строки в объект JavaScript?
Вы можете сделать это с помощью
data = eval('(' + string_data + ')');
или, что безопаснее,data = JSON.parse(string_data);
но позже будет работать только в FF 3.5 или если вы включите json2.jsjQuery начиная с 1.4.1 также имеет функцию для этого
$.parseJSON()
.Но на самом деле,
$.getJSON()
должен дать вам уже проанализированный объект json, так что вы должны просто тщательно проверить все, где-то закопана небольшая ошибка, как будто вы забыли процитировать что-то в json, или отсутствует одна из скобок.источник
fillselect(eval(data));
eval
?data = eval('('+string_data+')');
. Кроме того, у jQuery есть еще одна функцияdata = jQuery.parseJSON(string_data);
eval(data)
работает. Пожалуйста, смотрите мой РЕДАКТИРОВАТЬ 2getJSON будет оценивать данные в JSON для вас, если используется правильный тип содержимого. Убедитесь, что сервер возвращает данные как application / json.
источник
Content-Type: application/json; charset=utf-8
источник