1 <?xml version="1.0" encoding="UTF-8"?>
3 <sect3 id="zend.controller.actionhelpers.json">
7 JSON быстро становится предпочтительным форматом для использования с
8 AJAX-запросами, которые подразумевают ответы с данными. Синтаксический
9 разбор JSON может производиться сразу на стороне клиента, что приводит
10 к большей производительности.
14 Помощник действий JSON выполняет несколько функций:
19 Отключает макеты, если они включены.
24 Опционально в качестве второго аргумента можно передавать
25 массив опций для <code>Zend_Json::encode()</code>.
26 Этот масив опций позволяет включать макеты и кодирование
27 с использованием <classname>Zend_Json_Expr</classname>.
30 <programlisting language="php"><![CDATA[
31 $this->_helper->json($data, array('enableJsonExprFinder' => true));
36 Отключает ViewRenderer, если он включен.
40 Устанавливает заголовок ответа 'Content-Type' со значением
45 По умолчанию сразу возвращает ответ, не дожидаясь завершения
51 Использование помощника довольно простое - вызывайте его как метод
52 брокера помощников или вызывайте один из его методов
53 <code>encodeJson()</code> или
54 <code>sendJson()</code>:
57 <programlisting language="php"><![CDATA[
58 class FooController extends Zend_Controller_Action
60 public function barAction()
62 // произведение некоторых действий...
64 // Отправка ответа JSON:
65 $this->_helper->json($data);
68 $this->_helper->json->sendJson($data);
70 // либо получение данных в формате json:
71 $json = $this->_helper->json->encodeJson($data);
78 <title>Использование макетов</title>
81 Если вы имеете отдельный макет для ответов JSON (возможно, для того,
82 чтобы включить ответ JSON в некоторый контекст), то на этот случай
83 все методы в помощнике JSON принимает второй, опциональный
84 аргумент - флаг для включения/отключения макетов. Передача булевого
85 значения <constant>TRUE</constant> позволит оставить макеты включенными:
88 <programlisting language="php"><![CDATA[
89 $this->_helper->json($data, true);
93 Вы можете также передавать массив через второй параметр.
94 Этот массив может содержать набор опций, включая опцию
95 <code>keepLayouts</code>:
98 <programlisting language="php"><![CDATA[
99 $this->_helper->json($data, array('keepLayouts' => true);
104 <title>Включение кодирования через Zend_Json_Expr</title>
107 <classname>Zend_Json::encode()</classname> позволяет закодировывать
108 "родные" выражения JSON с использованием объектов
109 <code>Zend_Json_Expr</code>. Эта опция по умолчанию отключена.
110 Для того, чтобы включить эту опцию, передавайте
111 булево значение <constant>TRUE</constant> через опцию
112 <code>enableJsonExprFinder</code>:
115 <programlisting language="php"><![CDATA[
116 $this->_helper->json($data, array('enableJsonExprFinder' => true);
120 При использовании этой опции вы <emphasis>должны</emphasis>
121 передавать массив в качестве второго параметра. Это также
122 позволяет комбинировать опции друг с другом - например, с опцией
123 <code>keepLayouts</code>. Все эти опции потом передаются
124 <classname>Zend_Json::encode()</classname>.
127 <programlisting language="php"><![CDATA[
128 $this->_helper->json($data, array(
129 'enableJsonExprFinder' => true,
130 'keepLayouts' => true,