JSON Helper
When creating views that return JSON, it's important to also set the
appropriate response header. The JSON view helper does exactly that. In
addition, by default, it disables layouts (if currently enabled), as
layouts generally aren't used with JSON responses.
The JSON helper sets the following header:
Most AJAX libraries look for this header when parsing responses to
determine how to handle the content.
Usage of the JSON helper is very straightforward:
json($this->data) ?>
]]>
Keeping layouts and enabling encoding using Zend_Json_Expr
Each method in the JSON helper accepts a second, optional argument.
This second argument can be a boolean flag to enable or disable
layouts, or an array of options that will be passed to
Zend_Json::encode() and used internally to encode data.
To keep layouts, the second parameter needs to be boolean
TRUE. When the second parameter is an array, keeping
layouts can be achieved by including a keepLayouts key
with a value of a boolean TRUE.
json($this->data, true);
// Or boolean true as "keepLayouts" key:
echo $this->json($this->data, array('keepLayouts' => true));
]]>
Zend_Json::encode allows the encoding of native
JSON expressions using Zend_Json_Expr objects.
This option is disabled by default. To enable this option, pass a boolean
TRUE to the enableJsonExprFinder key of
the options array:
json($this->data, array(
'enableJsonExprFinder' => true,
'keepLayouts' => true,
)) ?>
]]>
Sending pre-encoded JSON
By default, the JSON helper will JSON-encode the
data provided to the helper's first parameter. If you wish to pass
in data which has already been encoded into JSON,
the third parameter needs to be set to boolean FALSE.
When the second parameter is an array, disabling JSON
encoding can be achived by including a encodeData
key with the value of boolean FALSE:
json($this->data, false, false);
// Or boolean false as "encodeData" key:
echo $this->json($this->data, array('encodeData' => false));
]]>