JSON(日本語)
JSON レスポンスは、AJAX リクエストでデータセットを受け取るときの
形式としてすっかり定着しました。JSON はクライアント側で
すぐにパースすることができ、すばやく実行できます。
JSON アクションヘッダは次のようなことを行います。
レイアウト機能が有効になっている場合はそれを無効にする。
任意で、オプションの配列を
Zend_Json::encode() の 2 番目の引数として渡す。
このオプションの配列で、レイアウト機能を有効にしたり
Zend_Json_Expr によるエンコードを有効にしたりする。
_helper->json($data, array('enableJsonExprFinder' => true));
]]>
ViewRenderer が有効になっている場合にそれを無効にする。
'Content-Type' レスポンスヘッダを 'application/json' に設定する。
デフォルトでレスポンスをすぐに返す。
アクションの実行が終了するのを待たない。
使い方は簡単です。ヘルパーブローカのメソッドとしてコールするか、
encodeJson() あるいは
sendJson() といったメソッドをコールするだけです。
_helper->json($data);
// あるいは...
$this->_helper->json->sendJson($data);
// あるいは JSON を取得します
$json = $this->_helper->json->encodeJson($data);
}
}
]]>
レイアウトの維持
JSON レスポンスでレイアウト機能を使用したい場合
(いくつかの JSON レスポンスをひとつにまとめて処理するなど)
のために、JSON ヘルパーの各メソッドには
2 番目の引数が用意されています。
この引数はオプションのフラグで、レイアウト機能を有効あるいは無効にします。
TRUE を渡すと、レイアウト機能を有効なままにします。
_helper->json($data, true);
]]>
オプションで、2 番目の引数に配列を渡すことができます。
この配列には、keepLayouts
のオプションを含むさまざまなオプションを指定できます。
_helper->json($data, array('keepLayouts' => true);
]]>
Zend_Json_Expr を使用したエンコードの有効化
Zend_Json::encode() は、ネイティブ JSON 式を
Zend_Json_Expr オブジェクトを使用してエンコードできます。
このオプションはデフォルトでは無効になっています。
有効にするには、enableJsonExprFinder
オプションに TRUE を設定します。
_helper->json($data, array('enableJsonExprFinder' => true);
]]>
これを行いたい場合は、2 番目の引数に必ず配列を渡さなければなりません。
また、たとえば keepLayouts のような他のオプションと組み合わせることもできます。
これらすべてのオプションが Zend_Json::encode() に渡されます。
_helper->json($data, array(
'enableJsonExprFinder' => true,
'keepLayouts' => true,
));
]]>