1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
<?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>
|