Controller A:
Zend_Controller_Front::getInstance()
->setParam('noViewRenderer', false);
$this->_helper->layout->disableLayout();
$form = new Form_Targets();
$this->view->form = $form;
if(!isset($form)) $form = false;
View A:
<?php echo Zend_Json::encode(array('form' => $this->form));?>
Controller B:
Zend_Controller_Front::getInstance()
->setParam('noViewRenderer', true);
$this->_helper->layout->disableLayout();
$form = new Form_Targets();
$this->view->form = $form;
if(!isset($form)) $form = false;
echo Zend_Json::encode(array('form' => $form));
View B:
Blank
View script where Ajax Returned:
<div id='paz'>
<p>Ello</p>
<p>Ello</p>
</div>
<script type="text/javascript">
$('#available').bind('change', function (e)
{
$.getJSON('<?php echo $this->baseURL()?>/admin/ajax/target-year/year/' + encodeURIComponent($('#available').val()),
function(data)
{
alert(data);
$("#paz").html(data.form);
}
);
});
</script>
Response A:
{"form":{}}
Reponse B:
{"form":{}}
The problem is the form is not being returned...
Just to not leave thread without answer:
Form has to be rendered in order to be able to encode it into JSON:
Zend_Json::encode(array('form' => $this->form->render()));
without ->render()
array had form object instead of it's HTML representation.
Usually people use $this->form
to render form, forgetting that it uses magic method __toString()
to render form.