| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?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>
|