Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JSON с сервака, замучала "missing ; before statement" (https://javascript.ru/forum/misc/13160-json-s-servaka-zamuchala-missing-%3B-before-statement.html)

said46 18.11.2010 11:07

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)

Kolyaj 18.11.2010 11:26

В первом случае у вас data это массив, во втором -- строка. Примеры не эквивалентны.

said46 18.11.2010 11:28

исправил (добавил кавычки), проверил, 1 вариант рабочий

SV0L0CH 18.11.2010 12:10

Почему eval а не JSON.stringify ?

said46 18.11.2010 12:46

Ты имел ввиду JSON.parse? Ведь JSON.stringify - обратное преобразование.
Я так понял для этого надо подключать библиотеку, которая весит не меньше 2.5 килобайт.

said46 18.11.2010 13:11

JSON.parse в FF тоже выдает ошибку, но работает, IE не знает что такое JONS

B@rmaley.e><e 18.11.2010 13:20

data = '(' + data + ')';
Должно сработать. Если не работает - значит у Вас невалидный JSON.

JSON есть нативно в новых браузерах, для остальных подключать библиотеку.

SV0L0CH 18.11.2010 13:27

Цитата:

Сообщение от said46
Ты имел ввиду JSON.parse

Точно, спросонья попутал малость :p
Цитата:

Сообщение от said46
Я так понял для этого надо подключать библиотеку, которая весит не меньше 2.5 килобайт.

Да, если нужна поддержка древними браузерами.
Цитата:

Сообщение от said46
JSON.parse в FF тоже выдает ошибку

Я тут вгляделся в код, поля должны быть строками, тоесть в кавычках.
var data = "[{'id': '501', 'fio': 'Агафонов Н.Г.'}, {'id': '518', 'fio': 'Болобанова Т.В.'}]";

said46 18.11.2010 13:28

Со скобками работает, но выдает другую ошибку "missing ) in parenthetical". JSON точно валидный, потому что в php я тупо скопировал строку из первого примера.
Возможно что-то в настройках Апача кроется, или в php-ответе надо хедер какой-нибудь задать...

ЗЫ Apache/2.2.10 (Win32)

said46 18.11.2010 13:32

Цитата:

Сообщение от said46
Я тут вгляделся в код, поля должны быть строками, тоесть в кавычках.
var data = "[{'id': '501', 'fio': 'Агафонов Н.Г.'}, {'id': '518', 'fio': 'Болобанова Т.В.'}]";

кавычки добавлял, разницы не ощутил


Часовой пояс GMT +3, время: 15:07.