Zend_Controller-ActionHelpers-Json.xml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15142 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.controller.actionhelpers.json">
  5. <title>JSON</title>
  6. <para>
  7. JSON Antworten sind die Antworten der Wahl wenn mit AJAX Anfragen gearbeitet wird die
  8. Dataset Antworten erwarten; JSON kann sofort auf Seite des Clienten geparst werden, was zu
  9. schneller Ausführung führt.
  10. </para>
  11. <para>
  12. Der JSON Action Helfer macht verschiedene Dinge:
  13. </para>
  14. <itemizedlist>
  15. <listitem><para>
  16. Layouts auschalten wenn sie aktuell aktiviert sind.
  17. </para></listitem>
  18. <listitem>
  19. <para>
  20. Optional ein Array von Optionen als zweites Argument an
  21. <code>Zend_Json::encode()</code> übergeben. Dieses Array von Optionen erlaubt es
  22. Layouts und Kodierungen einzuschalten indem <code>Zend_Json_Expr</code> verwendet
  23. wird.
  24. </para>
  25. <programlisting role="php"><![CDATA[
  26. $this->_helper->json($data, array('enableJsonExprFinder' => true));
  27. ]]></programlisting>
  28. </listitem>
  29. <listitem><para>
  30. Den ViewRenderer ausschalten wenn er aktiviert ist.
  31. </para></listitem>
  32. <listitem><para>
  33. Den 'Content-Type' Antwort Header auf 'application/json' setzen.
  34. </para></listitem>
  35. <listitem><para>
  36. Standardmäßig, die Antwort sofort zurückgeben, ohne darauf zu warten das die Aktion
  37. die Ausführung beendet.
  38. </para></listitem>
  39. </itemizedlist>
  40. <para>
  41. Die Verwendung ist einfach: Entweder als Methode des Helfer Brokers aufrufen, oder eine der
  42. Methoden <code>encodeJson()</code> oder <code>sendJson()</code> aufrufen:
  43. </para>
  44. <programlisting role="php"><![CDATA[
  45. class FooController extends Zend_Controller_Action
  46. {
  47. public function barAction()
  48. {
  49. // einige Berechnungen durchführen...
  50. // Die JSON Antwort senden:
  51. $this->_helper->json($data);
  52. // oder...
  53. $this->_helper->json->sendJson($data);
  54. // oder das JSON empfangen:
  55. $json = $this->_helper->json->encodeJson($data);
  56. }
  57. }
  58. ]]></programlisting>
  59. <note>
  60. <title>Layouts behalten</title>
  61. <para>
  62. Wenn man ein separates Layout für JSON Antworten hat -- möglicherweise um die JSON
  63. Antworten in einer Art Kontext zu wrappen -- akzeptiert jede Methode im JSON Helfer
  64. ein zweites, optionales Argument: Ein Flag um Layouts zu aktivieren oder deaktivieren.
  65. Die Übergabe eines boolschen <code>true</code> Wertes hält Layouts aktiviert:
  66. </para>
  67. <programlisting role="php"><![CDATA[
  68. $this->_helper->json($data, true);
  69. ]]></programlisting>
  70. <para>
  71. Optional kann ein Array als zweiter Parameter übergeben werden. Dieses Array kann eine
  72. Vielzahl von Optionen enthalten, inklusive der <code>keepLayouts</code> Option:
  73. </para>
  74. <programlisting role="php"><![CDATA[
  75. $this->_helper->json($data, array('keepLayouts' => true);
  76. ]]></programlisting>
  77. </note>
  78. <note>
  79. <title>Kodierung einschalten durch Verwendung von Zend_Json_Expr</title>
  80. <para>
  81. <code>Zend_Json::encode()</code> erlaubt die Kodierung von nativen JSON Ausdrücken
  82. indem <code>Zend_Json_Expr Objekte verwendet</code> werden. Diese Option ist
  83. standardmäßig ausgeschaltet. Um diese Option einzuschalten muß ein boolscher
  84. <code>true</code> Wert an die <code>enableJsonExprFinder</code> Option übergeben
  85. werden:
  86. </para>
  87. <programlisting role="php"><![CDATA[
  88. $this->_helper->json($data, array('enableJsonExprFinder' => true);
  89. ]]></programlisting>
  90. <para>
  91. Wenn man das durchführen will, <emphasis>muss</emphasis> man ein Array als zweite
  92. Option übergeben. Das erlaubt es auch andere Optionen, wie zum Beispiel die
  93. <code>keepLayouts</code> Option, zu kombinieren. Alle diese Optionen werden dann
  94. an <code>Zend_Json::encode()</code> übergeben.
  95. </para>
  96. <programlisting role="php"><![CDATA[
  97. $this->_helper->json($data, array(
  98. 'enableJsonExprFinder' => true,
  99. 'keepLayouts' => true,
  100. ));
  101. ]]></programlisting>
  102. </note>
  103. </sect3>
  104. <!--
  105. vim:se ts=4 sw=4 et:
  106. -->