Zend_Controller-ActionHelpers-Json.xml 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect3 id="zend.controller.actionhelpers.json">
  5. <title>JSON</title>
  6. <para>
  7. Ответы в формате <acronym>JSON</acronym> становятся все более популярными
  8. для работы с <acronym>AJAX</acronym> запросами, которые предполагают отправку
  9. и получение массивов данных; <acronym>JSON</acronym> может быть немедленно
  10. обработан на стороне клиента, что существенно ускоряет выполнение скриптов.
  11. </para>
  12. <para>
  13. Помощник действий <acronym>JSON</acronym> выполняет несколько функций:
  14. </para>
  15. <itemizedlist>
  16. <listitem>
  17. <para>
  18. Отключает макеты, если они включены.
  19. </para>
  20. </listitem>
  21. <listitem>
  22. <para>
  23. Альтернативно, можно передавать массив параметров, который будет использован
  24. в качестве второго аргумента для <methodname>Zend_Json::encode()</methodname>.
  25. Передавая массив параметров, можно включить макеты и кодирование
  26. с использованием <classname>Zend_Json_Expr</classname>.
  27. </para>
  28. <programlisting language="php"><![CDATA[
  29. $this->_helper->json($data, array('enableJsonExprFinder' => true));
  30. ]]></programlisting>
  31. </listitem>
  32. <listitem>
  33. <para>
  34. Отключает ViewRenderer, если он включен.
  35. </para>
  36. </listitem>
  37. <listitem>
  38. <para>
  39. Присваивает заголовку ответа 'Content-Type' значение
  40. '<filename>application/json</filename>'.
  41. </para>
  42. </listitem>
  43. <listitem>
  44. <para>
  45. По умолчанию немедленно возвращает ответ, не дожидаясь завершения
  46. выполнения действия.
  47. </para>
  48. </listitem>
  49. </itemizedlist>
  50. <para>
  51. Использование: помощник может быть вызван как метод брокера помощников действий
  52. или посредством вызова одного из его методов <methodname>encodeJson()</methodname>
  53. или <methodname>sendJson()</methodname>:
  54. </para>
  55. <programlisting language="php"><![CDATA[
  56. class FooController extends Zend_Controller_Action
  57. {
  58. public function barAction()
  59. {
  60. // выполнить некоторые действия...
  61. // отправить ответ в формате JSON
  62. $this->_helper->json($data);
  63. // или...
  64. $this->_helper->json->sendJson($data);
  65. // или получить ответ в формате json:
  66. $json = $this->_helper->json->encodeJson($data);
  67. }
  68. }
  69. ]]></programlisting>
  70. <note>
  71. <title>Использование макетов</title>
  72. <para>
  73. В случае необходимости использования макета для возвращения ответов
  74. в формате <acronym>JSON</acronym> (например, для возвращения <acronym>JSON</acronym>
  75. как части некоторого контекста), при вызове любого из методов помощника
  76. <acronym>JSON</acronym> нужно передавать второй, необязательный, аргумент:
  77. флаг для включения/отключения макетов. Передача булевого значения
  78. <constant>TRUE</constant> оставит макеты включенными:
  79. </para>
  80. <programlisting language="php"><![CDATA[
  81. $this->_helper->json($data, true);
  82. ]]></programlisting>
  83. <para>
  84. Альтернативно, в качестве второго аргумента можно передавать массив параметров,
  85. среди которых и <emphasis>keepLayouts</emphasis>:
  86. </para>
  87. <programlisting language="php"><![CDATA[
  88. $this->_helper->json($data, array('keepLayouts' => true);
  89. ]]></programlisting>
  90. </note>
  91. <note>
  92. <title>Включение кодирования с использованием Zend_Json_Expr</title>
  93. <para>
  94. Метод <methodname>Zend_Json::encode()</methodname> позволяет кодировать "родные"
  95. <acronym>JSON</acronym> выражения при помощи объектов класса
  96. <classname>Zend_Json_Expr</classname>. По умолчанию эта возможность отключена.
  97. Для того, чтоб ее включить, нужно передать параметр
  98. <emphasis>enableJsonExprFinder</emphasis> со значением <constant>TRUE</constant>:
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. $this->_helper->json($data, array('enableJsonExprFinder' => true);
  102. ]]></programlisting>
  103. <para>
  104. Для использования описанной возможности <emphasis>необходимо</emphasis> передавать
  105. массив в качестве второго аргумента. Кроме указанного параметра, в массив
  106. можно включить и другие, к примеру <emphasis>keepLayouts</emphasis>.
  107. Все параметры из этого массива будут переданы как аргумент при вызове
  108. <methodname>Zend_Json::encode()</methodname>.
  109. </para>
  110. <programlisting language="php"><![CDATA[
  111. $this->_helper->json($data, array(
  112. 'enableJsonExprFinder' => true,
  113. 'keepLayouts' => true,
  114. ));
  115. ]]></programlisting>
  116. </note>
  117. </sect3>
  118. <!--
  119. vim:se ts=4 sw=4 et:
  120. -->