<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 24249 -->
    <!-- Reviewed: no -->
<sect3 id="zend.controller.actionhelpers.json">
    <title>JSON</title>

    <para>
        Las respuestas
        <acronym>JSON</acronym>
        se están convirtiendo en la respuesta de elección
        cuando se trata de requerimientos
        <acronym>AJAX</acronym>
        que esperan recibir
        respuestas datasets; en el lado del cliente,
        <acronym>JSON</acronym>
        puede ser inmediatamente parseado y
        ejecutado rápidamente.
    </para>

    <para>
        El ayudante de acción de
        <acronym>JSON</acronym>
        hace varias cosas:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                Deshabilita los layouts si estuvieran habilitados.
       </para>
        </listitem>

        <listitem>
            <para>
                Opcionalmente, un array de opciones que pasar como segundo
                argumento a
                <methodname>Zend_Json::encode()</methodname>
                .
                Este array de opciones permite habilitar layouts y
                codificación utilizando
                <classname>Zend_Json_Expr</classname>
                .
            </para>

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

        <listitem>
            <para>
                Desactiva la ViewRenderer si está actualmente habilitada.
        </para>
        </listitem>

        <listitem>
            <para>
                Establece la cabecera de respuesta 'Content-Type' a '
                <filename>application/json</filename>
                '.
            </para>
        </listitem>

        <listitem>
            <para>
                Por defecto, devuelve inmediatamente la respuesta, sin esperar
                a la acción para
                finalizar la ejecución.
       </para>
        </listitem>
    </itemizedlist>

    <para>
        El uso es simple: o bien llamarlo como un método del ayudante,
        o llamar a uno de los métodos
        <methodname>encodeJson()</methodname>
        o
        <methodname>sendJson()</methodname>
        :
    </para>

    <programlisting language="php"><![CDATA[
class FooController extends Zend_Controller_Action
{
    public function barAction()
    {
        // hacer algún procesamiento...
        // Enviar la respuesta JSON:
        $this->_helper->json($data);

        // o...
        $this->_helper->json->sendJson($data);

        // o recuperar json:
        $json = $this->_helper->json->encodeJson($data);
    }
}
]]></programlisting>

    <note>
        <title>Conservando los Esquemas(Layouts)</title>

        <para>
            Si se tiene un esquema separado para respuestas de
            <acronym>JSON</acronym>
            --
            quizás para envolver la respuesta de
            <acronym>JSON</acronym>
            en algún tipo de
            contexto -- cada método en el ayudante
            <acronym>JSON</acronym>
            acepta un segundo
            argumento opcional: un flag para activar o desactivar layouts.
            Pasando
            un valor booleano
            <constant>TRUE</constant>
            conservará los layouts
            habilitados:
        </para>

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

        <para>
            Opcionalmente, puede pasar un array como el segundo parámetro.
            Este array puede contener
            una variedad de opciones, incluida la
            opción
            <emphasis>keepLayouts</emphasis>
            :
        </para>

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

    <note>
        <title>Habilitando la Codificación usando Zend_Json_Expr</title>

        <para>
            <methodname>Zend_Json::encode()</methodname>
            permite la codificación
            de expresiones nativas de
            <acronym>JSON</acronym>
            utilizando objetos
            <classname>Zend_Json_Expr</classname>
            . Esta opción está desactivada por
            defecto. Para activar esta opción, pase un valor
            booleano
            <constant>TRUE</constant>
            a la opción
            <emphasis>enableJsonExprFinder</emphasis>
            :
        </para>

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

        <para>
            Si desea hacer esto,
            <emphasis>debe</emphasis>
            pasar un array
            como segundo argumento. Esto también le permite combinar otras
            opciones,
            como la opción
            <emphasis>keepLayouts</emphasis>
            . Todas esas
            opciones se pasan luego a
            <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:
-->
