<commit_before><?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:
--><commit_msg>[DOCUMENTATION] Russian:  - Sync with r20765 - Thanks to <NAME><commit_after><?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 20765 -->
<!-- Reviewed: no -->
<sect3 id="zend.controller.actionhelpers.json">
    <title>JSON</title>

    <para>
        Ответы в формате <acronym>JSON</acronym> становятся все более популярными
        для работы с <acronym>AJAX</acronym> запросами, которые предполагают отправку
        и получение массивов данных; <acronym>JSON</acronym> может быть немедленно
        обработан на стороне клиента, что существенно ускоряет выполнение скриптов.
    </para>

    <para>
        Помощник действий <acronym>JSON</acronym> выполняет несколько функций:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                Отключает макеты, если они включены.
            </para>
        </listitem>

        <listitem>
            <para>
                Альтернативно, можно передавать массив параметров, который будет использован
                в качестве второго аргумента для <methodname>Zend_Json::encode()</methodname>.
                Передавая массив параметров, можно включить макеты и кодирование
                с использованием <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' значение
                '<filename>application/json</filename>'.
            </para>
        </listitem>

        <listitem>
            <para>
                По умолчанию немедленно возвращает ответ, не дожидаясь завершения
                выполнения действия.
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Использование: помощник может быть вызван как метод брокера помощников действий
        или посредством вызова одного из его методов <methodname>encodeJson()</methodname>
        или <methodname>sendJson()</methodname>:
    </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>
            В случае необходимости использования макета для возвращения ответов
            в формате <acronym>JSON</acronym> (например, для возвращения <acronym>JSON</acronym>
            как части некоторого контекста), при вызове любого из методов помощника
            <acronym>JSON</acronym> нужно передавать второй, необязательный, аргумент:
            флаг для включения/отключения макетов. Передача булевого значения
            <constant>TRUE</constant> оставит макеты включенными:
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, true);
]]></programlisting>

        <para>
            Альтернативно, в качестве второго аргумента можно передавать массив параметров,
            среди которых и <emphasis>keepLayouts</emphasis>:
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('keepLayouts' => true);
]]></programlisting>
    </note>

    <note>
        <title>Включение кодирования с использованием Zend_Json_Expr</title>

        <para>
            Метод <methodname>Zend_Json::encode()</methodname> позволяет кодировать "родные"
            <acronym>JSON</acronym> выражения при помощи объектов класса
            <classname>Zend_Json_Expr</classname>. По умолчанию эта возможность отключена.
            Для того, чтоб ее включить, нужно передать параметр
            <emphasis>enableJsonExprFinder</emphasis> со значением <constant>TRUE</constant>:
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array('enableJsonExprFinder' => true);
]]></programlisting>

        <para>
            Для использования описанной возможности <emphasis>необходимо</emphasis> передавать
            массив в качестве второго аргумента. Кроме указанного параметра, в массив
            можно включить и другие, к примеру <emphasis>keepLayouts</emphasis>.
            Все параметры из этого массива будут переданы как аргумент при вызове
            <methodname>Zend_Json::encode()</methodname>.
        </para>

        <programlisting language="php"><![CDATA[
$this->_helper->json($data, array(
    'enableJsonExprFinder' => true,
    'keepLayouts'          => true,
));
]]></programlisting>
    </note>
</sect3>
<!--
vim:se ts=4 sw=4 et:
-->
{'fraction_non_alphanumeric': 0.11374109761206536, 'fraction_numerical': 0.0025136154168412233, 'mean_word_length': 2.4748908296943233, 'pattern_counts': {'":': 0, '<': 213, '<?xml version=': 2, '>': 259, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5453962', 'n_tokens_mistral': 3108, 'n_tokens_neox': 3357, 'n_words': 689}