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

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

    <para>
        El ayudante de acción de JSON 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 <classname>Zend_Json::encode()</classname>.
                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 'application/json'.
         </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 JSON --
            quizás para envolver la respuesta de JSON en algún tipo de
            contexto -- cada método en el ayudante JSON acepta un segundo
            argumento opcional: un flag para activar o desactivar layouts.
            Pasando un valor booleano <methodname>true</methodname> 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 <methodname>keepLayouts</methodname>:
        </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>
            <classname>Zend_Json::encode()</classname> permite la codificación
            de expresiones nativas de JSON utilizando objetos
            <methodname>Zend_Json_Expr</methodname>. Esta opción está desactivada por
            defecto. Para activar esta opción, pase un valor booleano
            <methodname>true</methodname> a la opción <methodname>enableJsonExprFinder</methodname>:
        </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 <methodname>keepLayouts</methodname>. Todas esas
            opciones se pasan luego a <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:
-->
