JSON с сервака, замучала "missing ; before statement"
два варианта кода, в первом JSON задается в самом скрипте (для проверки корректности JSON), второй генерит с помощью php то же самое. Первый вариант работает, второй выдает ошибку "missing ; before statement".
1: if (xmlHttp.status == 200) { var data = "[{id: '501', fio: 'Агафонов Н.Г.'}, {id: '518', fio: 'Болобанова Т.В.'}]"; var resp = eval(data); for (i = 0; i <= resp.length-1; i++) p_object.options[i] = new Option(resp[i].fio, resp[i].id); } 2: if (xmlHttp.status == 200) { var data = xmlHttp.responseText; var resp = eval(data); for (i = 0; i <= resp.length-1; i++) p_object.options[i] = new Option(resp[i].fio, resp[i].id); } Пробовал добавлять в php скрипт строку header("Content-Type: application/json; charset=windows-1251");, добавлять круглые скобочки, точку с запятой в разные места - не помогает ЗЫ В принципе скрипт отрабатывает в FireFox и IE, но c ошибкой (текст ошибки получил с помощью FireBug) |
В первом случае у вас data это массив, во втором -- строка. Примеры не эквивалентны.
|
исправил (добавил кавычки), проверил, 1 вариант рабочий
|
Почему eval а не JSON.stringify ?
|
Ты имел ввиду JSON.parse? Ведь JSON.stringify - обратное преобразование.
Я так понял для этого надо подключать библиотеку, которая весит не меньше 2.5 килобайт. |
JSON.parse в FF тоже выдает ошибку, но работает, IE не знает что такое JONS
|
data = '(' + data + ')';Должно сработать. Если не работает - значит у Вас невалидный JSON. JSON есть нативно в новых браузерах, для остальных подключать библиотеку. |
Цитата:
Цитата:
Цитата:
var data = "[{'id': '501', 'fio': 'Агафонов Н.Г.'}, {'id': '518', 'fio': 'Болобанова Т.В.'}]"; |
Со скобками работает, но выдает другую ошибку "missing ) in parenthetical". JSON точно валидный, потому что в php я тупо скопировал строку из первого примера.
Возможно что-то в настройках Апача кроется, или в php-ответе надо хедер какой-нибудь задать... ЗЫ Apache/2.2.10 (Win32) |
Цитата:
|
Цитата:
Вы покажите строку-то, которая присваивается из responseText. |
содержимое php-скрипта, генерящего ответ от сервера:
<?header("Content-Type: application/json; charset=windows-1251");?> [{"id": "501", "fio": "Агафонов Н.Г."}, {"id": "518", "fio": "Болобанова Т.В."}] пробовал уже и с апострофами, и с кавычками... я же говорил, что содержимое php-ответа полностью совпадает с содержимым строки data в первом примере, который работает БЕЗ ошибок, т.е. валидность JSON вроде бы ни при чем. |
У вас перенос строки здесь.
|
не понял где перенос строки?
кстати, попробовал сделать так: Закинул в php строку вида "100:name1,200:name2", разобрал с помощью split, все работает без ошибок (идея с http://www.internet-technologies.ru/...ticle_526.html). Смущает только то, что, во-первых, это как то нестандартно, а во вторых, я еще хочу атрибуты к <options> прикрутить (доп. данные кроме атрибута value). |
После отправки заголовка у вас идёт перенос строки. А в JSON не может быть переносов строк.
Хотя он тут не причём. Но убрать надо. |
а если просто скачать содержимое, то что там?
|
Вобщем покажите, что в Firefox-е покажет
alert(JSON.stringify(xmlHttp.responseText)); |
"[{\"id\": \"501\", \"fio\": \"Агафонов Н.Г.\"}, {\"id\": \"518\", \"fio\": \"Болобанова Т.В.\"}]" |
Выглядит вроде как валидно, может попробовать кодировку на utf-8 поменять?
|
менял, получаем все то же самое, только кракозябрами
|
Все что хотел сделал с помощью split. И инфа компактнее, и глюков нема.
|
Только если в name будет ':' или ',', то все поломается.
|
Вот над этим как раз и работаю, символы ведь не обязательно д.б. такими.
|
Разделители в виде '::' и '||' меня вполне устроили.
|
я не могу понять, куда вводить все это?
|
Часовой пояс GMT +3, время: 14:32. |