| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect3 id="zend.controller.actionhelpers.json">
- <title>JSON</title>
- <para>
- JSON быстро становится предпочтительным форматом для использования с
- AJAX-запросами, которые подразумевают ответы с данными. Синтаксический
- разбор JSON может производиться сразу на стороне клиента, что приводит
- к большей производительности.
- </para>
- <para>
- Помощник действий JSON выполняет несколько функций:
- </para>
- <itemizedlist>
- <listitem><para>
- Отключает макеты, если они включены.
- </para></listitem>
- <listitem>
- <para>
- Опционально в качестве второго аргумента можно передавать
- массив опций для <code>Zend_Json::encode()</code>.
- Этот масив опций позволяет включать макеты и кодирование
- с использованием <classname>Zend_Json_Expr</classname>.
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('enableJsonExprFinder' => true));
- ]]></programlisting>
- </listitem>
- <listitem><para>
- Отключает ViewRenderer, если он включен.
- </para></listitem>
- <listitem><para>
- Устанавливает заголовок ответа 'Content-Type' со значением
- 'application/json'.
- </para></listitem>
- <listitem><para>
- По умолчанию сразу возвращает ответ, не дожидаясь завершения
- выполнения действия.
- </para></listitem>
- </itemizedlist>
- <para>
- Использование помощника довольно простое - вызывайте его как метод
- брокера помощников или вызывайте один из его методов
- <code>encodeJson()</code> или
- <code>sendJson()</code>:
- </para>
- <programlisting language="php"><![CDATA[
- class FooController extends Zend_Controller_Action
- {
- public function barAction()
- {
- // произведение некоторых действий...
- // Отправка ответа JSON:
- $this->_helper->json($data);
- // или...
- $this->_helper->json->sendJson($data);
- // либо получение данных в формате json:
- $json = $this->_helper->json->encodeJson($data);
- }
- }
- ]]>
- </programlisting>
- <note>
- <title>Использование макетов</title>
- <para>
- Если вы имеете отдельный макет для ответов JSON (возможно, для того,
- чтобы включить ответ JSON в некоторый контекст), то на этот случай
- все методы в помощнике JSON принимает второй, опциональный
- аргумент - флаг для включения/отключения макетов. Передача булевого
- значения <constant>TRUE</constant> позволит оставить макеты включенными:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, true);
- ]]></programlisting>
- <para>
- Вы можете также передавать массив через второй параметр.
- Этот массив может содержать набор опций, включая опцию
- <code>keepLayouts</code>:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('keepLayouts' => true);
- ]]></programlisting>
- </note>
- <note>
- <title>Включение кодирования через Zend_Json_Expr</title>
- <para>
- <classname>Zend_Json::encode()</classname> позволяет закодировывать
- "родные" выражения JSON с использованием объектов
- <code>Zend_Json_Expr</code>. Эта опция по умолчанию отключена.
- Для того, чтобы включить эту опцию, передавайте
- булево значение <constant>TRUE</constant> через опцию
- <code>enableJsonExprFinder</code>:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('enableJsonExprFinder' => true);
- ]]></programlisting>
- <para>
- При использовании этой опции вы <emphasis>должны</emphasis>
- передавать массив в качестве второго параметра. Это также
- позволяет комбинировать опции друг с другом - например, с опцией
- <code>keepLayouts</code>. Все эти опции потом передаются
- <classname>Zend_Json::encode()</classname>.
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array(
- 'enableJsonExprFinder' => true,
- 'keepLayouts' => true,
- ));
- ]]></programlisting>
- </note>
- </sect3>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|