Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.11.2010, 11:07
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

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)

Последний раз редактировалось said46, 18.11.2010 в 11:28.
Ответить с цитированием
  #2 (permalink)  
Старый 18.11.2010, 11:26
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

В первом случае у вас data это массив, во втором -- строка. Примеры не эквивалентны.
Ответить с цитированием
  #3 (permalink)  
Старый 18.11.2010, 11:28
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

исправил (добавил кавычки), проверил, 1 вариант рабочий
Ответить с цитированием
  #4 (permalink)  
Старый 18.11.2010, 12:10
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Почему eval а не JSON.stringify ?
Ответить с цитированием
  #5 (permalink)  
Старый 18.11.2010, 12:46
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

Ты имел ввиду JSON.parse? Ведь JSON.stringify - обратное преобразование.
Я так понял для этого надо подключать библиотеку, которая весит не меньше 2.5 килобайт.
Ответить с цитированием
  #6 (permalink)  
Старый 18.11.2010, 13:11
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

JSON.parse в FF тоже выдает ошибку, но работает, IE не знает что такое JONS
Ответить с цитированием
  #7 (permalink)  
Старый 18.11.2010, 13:20
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

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

JSON есть нативно в новых браузерах, для остальных подключать библиотеку.
Ответить с цитированием
  #8 (permalink)  
Старый 18.11.2010, 13:27
Профессор
Отправить личное сообщение для SV0L0CH Посмотреть профиль Найти все сообщения от SV0L0CH
 
Регистрация: 07.11.2010
Сообщений: 301

Сообщение от said46
Ты имел ввиду JSON.parse
Точно, спросонья попутал малость
Сообщение от said46
Я так понял для этого надо подключать библиотеку, которая весит не меньше 2.5 килобайт.
Да, если нужна поддержка древними браузерами.
Сообщение от said46
JSON.parse в FF тоже выдает ошибку
Я тут вгляделся в код, поля должны быть строками, тоесть в кавычках.
var data = "[{'id': '501', 'fio': 'Агафонов Н.Г.'}, {'id': '518', 'fio': 'Болобанова Т.В.'}]";
Ответить с цитированием
  #9 (permalink)  
Старый 18.11.2010, 13:28
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

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

ЗЫ Apache/2.2.10 (Win32)
Ответить с цитированием
  #10 (permalink)  
Старый 18.11.2010, 13:32
Интересующийся
Отправить личное сообщение для said46 Посмотреть профиль Найти все сообщения от said46
 
Регистрация: 18.11.2010
Сообщений: 13

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10