JSON, Eval и объект в объекте

Quidle

Полноценный новичок
JSON, Eval и объект в объекте

Доброго времени суток, дамы и господа!
Возникла вот такая проблемка:
Выполняю Ajax-запрос.
На сервере из таблички формируется массив.
Переделываю его в ассоциативный с индексами, соответствующими первичному ключу в таблице.
Формируем из этого дела JSON, отдаём клиенту.
Вот такой код исполняется без проблем:
PHP:
a = {"1":{"pk_id":"1","fc_category":"j"}};
А вот такой выдаёт ошибку:
PHP:
a = '{"1":{"pk_id":"1","fc_category":"j"}}';
b = eval (a);
Возможно, неверен сам подход, - в таком случае был бы благодарен, если бы вы мне посоветовали, как обойти проблему.
И тем не менее, непонятно, почему второй вариант выдаёт ошибку:
invalid label
[Break on this error] {"1":{"pk_id":"1","fc_category":"j"}}
 

Quidle

Полноценный новичок
Вау...
Заработало.
Спасибо :)
Стестняюсь спросить, это особая уличная магия?
 

newARTix

Новичок
Quidle
я конечно не спец в яваскрипте... но функция eval выполняет фрагмент кода. То есть в ней должно быть выражение которое что-то возвращает. Или набор выражений. А какой смысл имеет строчка:
Код:
{"1":{"pk_id":"1","fc_category":"j"}}
?
 

Quidle

Полноценный новичок
Тогда как вы объясните корректное выполнение строчки:
PHP:
eval ('{"pk_id":"1","fc_category":"j"}');
Нет, она не обязана что-то возвращать, насколько я в курсе.
 

MiRacLe

просто Чудо
PHP:
try {
 eval('{"pk_id":"1","fc_category":"j"}');
} catch (e) {   
   alert("Корректное говоришь?");
}
 

Quidle

Полноценный новичок
Сори, наврал :)
Сделаей проще - запрос к базе, возврат результата, и в JSON его.
PHP:
[{"pk_id":"1","fc_category":"j"}]
Вот такое дело работало :)

А вообще если опустить весь флуд на эту тему - интересно было бы почитать, почему именно так и никак иначе. Пока этой инфы не нашёл.
 

newARTix

Новичок
видимо скобки [] и выступают тем оператором который как-то преобразует содержащееся в нем и что-то все-таки возвращает. Чисто интуитивно...

вот так, тоже работает:

a = '({"pk_id":"1","fc_category":"j"})';
b = eval (a);
alert(b);

Тут, ту же роль выполняют уже другие скобки. А если опустить флуд, то если
Вот такой код исполняется без проблем:

a = {"1":{"pk_id":"1","fc_category":"j"}};
зачем дополнительные грабли?

По поводу "должна возвращать", я возможно неверно выразился, я имел ввиду что в eval должен быть корректный javascript-код. И результатом ее работы является результат работы включенного в нее кода.
 
Сверху