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

    <para>
        <acronym>JSON</acronym> Antworten sind die Antworten der Wahl wenn mit
        <acronym>AJAX</acronym> Anfragen gearbeitet wird die Dataset Antworten erwarten;
        <acronym>JSON</acronym> kann sofort auf Seite des Clienten geparst werden, was zu
        schneller Ausführung führt.
    </para>

    <para>
        Der <acronym>JSON</acronym> Action Helfer macht verschiedene Dinge:
    </para>

    <itemizedlist>
        <listitem>
            <para>
                Layouts auschalten wenn sie aktuell aktiviert sind.
            </para>
        </listitem>

        <listitem>
            <para>
                Optional ein Array von Optionen als zweites Argument an
                <methodname>Zend_Json::encode()</methodname> übergeben. Dieses Array von Optionen
                erlaubt es Layouts und Kodierungen einzuschalten indem
                <classname>Zend_Json_Expr</classname> verwendet wird.
            </para>

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

        <listitem>
            <para>
                Den ViewRenderer ausschalten wenn er aktiviert ist.
            </para>
        </listitem>

        <listitem>
            <para>
                Den 'Content-Type' Antwort Header auf '<filename>application/json</filename>'
                setzen.
            </para>
        </listitem>

        <listitem>
            <para>
                Standardmäßig, die Antwort sofort zurückgeben, ohne darauf zu warten das die Aktion
                die Ausführung beendet.
            </para>
        </listitem>
    </itemizedlist>

    <para>
        Die Verwendung ist einfach: Entweder als Methode des Helfer Brokers aufrufen, oder eine der
        Methoden <methodname>encodeJson()</methodname> oder <methodname>sendJson()</methodname>
        aufrufen:
    </para>

    <programlisting language="php"><![CDATA[
class FooController extends Zend_Controller_Action
{
    public function barAction()
    {
        // einige Berechnungen durchführen...
        // Die JSON Antwort senden:
        $this->_helper->json($data);

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

        // oder das JSON empfangen:
        $json = $this->_helper->json->encodeJson($data);
    }
}
]]></programlisting>

    <note>
        <title>Layouts behalten</title>

        <para>
            Wenn man ein separates Layout für <acronym>JSON</acronym> Antworten hat --
            möglicherweise um die <acronym>JSON</acronym> Antworten in einer Art Kontext zu wrappen
            -- akzeptiert jede Methode im <acronym>JSON</acronym> Helfer ein zweites, optionales
            Argument: Ein Flag um Layouts zu aktivieren oder deaktivieren. Die Übergabe eines
            boolschen <constant>TRUE</constant> Wertes hält Layouts aktiviert:
        </para>

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

        <para>
            Optional kann ein Array als zweiter Parameter übergeben werden. Dieses Array kann eine
            Vielzahl von Optionen enthalten, inklusive der <emphasis>keepLayouts</emphasis> Option:
        </para>

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

    <note>
        <title>Kodierung einschalten durch Verwendung von Zend_Json_Expr</title>

        <para>
            <methodname>Zend_Json::encode()</methodname> erlaubt die Kodierung von nativen
            <acronym>JSON</acronym> Ausdrücken indem <classname>Zend_Json_Expr</classname>
            Objekte verwendet werden. Diese Option ist standardmäßig ausgeschaltet. Um diese Option
            einzuschalten muß ein boolscher <constant>TRUE</constant> Wert an die
            <emphasis>enableJsonExprFinder</emphasis> Option übergeben werden:
        </para>

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

        <para>
            Wenn man das durchführen will, <emphasis>muss</emphasis> man ein Array als zweite
            Option übergeben. Das erlaubt es auch andere Optionen, wie zum Beispiel die
            <emphasis>keepLayouts</emphasis> Option, zu kombinieren. Alle diese Optionen werden
            dann an <methodname>Zend_Json::encode()</methodname> übergeben.
        </para>

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