Несмотря на то, что в слове 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-ом и евалом так и будут граблями, которые просто нужно запомнить как таблицу умножения и никогда на них не наступать
В js конструкция-выражение не может начинаться с фигурной скобки или со слова function. Иначе парсер (eval) может принять конструкцию-выражение за блок или за объявленную функцию. Поэтому принято с помощью скобок уточнять, что это именно выражение…
Спасибо
приятно что кто-то таки читает
Читают, факт. П.С. Спасибо за интересный блог!
1) да, да… читаемс…
2) а если опять на грабли - то в google and GOTO 1.