Грабли: json, eval и скобки

фото . урод, www.auto.ru, mamba.ru

Несмотря на то, что в слове AJAX последняя буква явно показывает на то что пересылаться должны таки xml-ники, на деле это очень не удобно, громоздко и геморойно. Раньше, когда я использовал Prototype.js я просто юзал Ajax.Updater - генерил html-код на серваке - и напрямую вставлял его куда надо.  Потом, поняв, что под прототайп не так уж много чего и есть - перешел на jQuery - и познакомился с json-ом.

И все бы зашибись - jQuery с ним работает как с родным (впрочем для javascript-а) он и есть родной, на обработку приходят уже сгенерированые объектики и т.п. все было классно и супер пока мне не попался проект, написанный с использованием прототайпа. Естесственно, на стороне сервера я по-привычке сделал json_encode - однако на клиент пришла именно что строка json. Что с ней делать я не знал - и полез курить гугл. Оказалось, что надо сделать eval, что вполне логично, потому что запись json - это ничто иное как короткая запись анонимного объекта javascript. Но это не работало. Никак. Ваще никак. json = eval(responseText) никак не хотел работать хоть ты убейся. Полчаса я пытался допереть в чем же все-таки дело, оказалось, что в такой записи json надо обрамлять скобками, т.е.:

json = eval( '(' + responseText + ')' );

вот так. Почему - хз. Перед тем как писать эту статью я честно перерыл все что можно было перерыть, но так и не смог найти, собсна почему это нужно делать именно так. Все что я нашел, это какую-то муть про Invalid Label, почему же она возникает тоже не понятно ни разу. Тем не менее, сути дела это не меняет - грабли с json-ом и евалом так и будут граблями, которые просто нужно запомнить как таблицу умножения и никогда на них не наступать :)

Комментарии (4) на “Грабли: json, eval и скобки”

  1. Zeroglif:

    В js конструкция-выражение не может начинаться с фигурной скобки или со слова function. Иначе парсер (eval) может принять конструкцию-выражение за блок или за объявленную функцию. Поэтому принято с помощью скобок уточнять, что это именно выражение…

  2. admin:

    Спасибо :) приятно что кто-то таки читает :)

  3. Читают, факт. П.С. Спасибо за интересный блог!

  4. phpize:

    1) да, да… читаемс…

    2) а если опять на грабли - то в google and GOTO 1.

Оставить комментарий

В Вашем браузере отключена поддержка JavaScript! Для корректной работы Вам необходимо включить поддержку JavaScript и обновить данную страницу.

Информеры с тИЦ и PR: получить код для сайта
Магазин Веллтексв Москве: отпариватель для одежды.