Парсинг JSON-строки выдает ошибку 'Invalid Label'

Как решить проблему ошибки 'Invalid Label' при работе с JSON-строкой?

Каждый раз когда мне нужно работать с AJAX я использую javascript-библиотеку jQuery и PHP в качестве серверного языка программирования. Так как в версиях PHP больше 5.2.0 присутствует функция json_encode(), я использую JSON в каждом случае передачи данных между Javascript и PHP. Кроме того, $.get и $.post легко работают с JSON, поэтому я всегда испольую этот тип данных.

Как бы то нибыло, иногда я не могу положится на выполнение рутинной работы за меня методами $.get и $.post. К примеру, когда я использую скрытый iframe, чтобы загрузить файл на сервер с помощью AJAX. Чтобы это сделать форма сабмитит файл на серверный скрипт. Скрипт загружается в скрытом iframe, поэтому пользователи не видят что происходит за кулисами. Как только загрузка завершена, скрипт возвращает некоторую информацию о файле в iframe (имя файла, путь, размер и т.д.). Дальше можно использовать Javascript, чтобы получить эту информацию.

Мой серверный скрипт всегда возвращает валидную JSON строку. Я использую эти данные, которые получаются из iframe, чтобы узнать успешно ли загружен файл и, если нет, какая ошибка возникла. В случае успешной загрузки мне нужно знать имя файла, размер и путь к нему. Информация, получающаяся в iframe, обычно выглядит так:

{"filename":"file.ext","size":"2516582","location":"\/path\/to\/file\/file.ext"}

Для распарсивания JSON строки в объект Javascript я использую eval(). (Некоторые предпочитают использовать JSON parser, но так как вывод скрипта строго подконтролен, я не вижу в этом особой надобности.) Увы, когда Javascript выполняет строку, возникает ошибка "invalid label".

Эта ошибка — результат интерпретации функцией eval() первой части строки в качестве label. Такая ошибка возникает каждый раз, но ее удивительно легко избежать. Просто оберните JSON-строку в скобки внутри eval():

var response = eval( '(' + jsonString + ')' );

Это одна из многих Javascript "gotchas", и я надеюсь она может сэкономить кодерам много времени.

Добавить комментарий

Filtered HTML

  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешённые HTML-теги: <a> <em> <i> <strong> <b> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p> <br>
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
CAPTCHA на основе изображений
Введите код с картинки