Maybe this is totally off topic but I know when I want to return JSON data
from one of my controller actions I use the json helper. You use it like
this $this->_helper->json($data); where $data is an array of data that you
want to send by JSON. NIce thing is that is also disables the view. No need
to call anything else. 


tony stamp wrote:
> 
> I'm not sure that's right - i thought the AjaxContext would handle that,
> and besides, that means i'd have to place conditionals inside each action
> to see if the request came from an XHR - if so, disable rendering, if not,
> carry on as normal. Isn't AjaxContext supposed to be transparent?
> 
> 
> 
> Daniel Latter-2 wrote:
>> 
>> You need to call setNoRender(true) of the viewRenderer helper inside  
>> your action.
>> 
>> 
>> On 1 Nov 2009, at 13:13, tony stamp <[email protected]> wrote:
>> 
>>>
>>> I have been having some trouble obtaining the html view rendered by  
>>> an action
>>> from an AJAX request. Initially, in my ajax-ed controller action, i  
>>> was
>>> checking if the request was XmlHttpRequest, and if so, disabling the  
>>> layout
>>> so just the portion of the view is returned. This was not working,  
>>> so a
>>> little research found pointers towards the AjaxContext helper. I  
>>> have set it
>>> up as follows:
>>>
>>> Controller:
>>> public function init(){
>>>            parent::init();
>>>            $this->flashMessenger = $this->getHelper('FlashMessenger');
>>>
>>>            $ajaxContext = $this->_helper->getHelper('AjaxContext');
>>>            $ajaxContext->addActionContext('view', 'html')
>>>                        ->initContext();
>>>        }
>>>
>>> public function viewAction(){
>>>            if(!($id = $this->getRequest()->getParam('newsID'))){
>>>                $this->_redirect('index');
>>>            }
>>>
>>>            $newsTable = new News_Table();
>>>            $select = $newsTable->select();
>>>            $select->setIntegrityCheck(false);
>>>            $select->from('news')->joinLeft('news_approved',
>>>                                             'news.id =  
>>> news_approved.news_id',
>>>                                             array('approver_id' =>  
>>> 'staff_id', 'date_approved'));
>>>            $select->where('id = ?',(int) $id);
>>>
>>>            $rowset = $newsTable->fetchAll($select);
>>>            $this->view->assign('news', $rowset->current());
>>>        }
>>>
>>> The view script rendered for this is called view.phtml, so as per the
>>> documentation, i copied the content and named a new view script
>>> view.ajax.phtml.
>>>
>>> Although the correct action is being called (from jquery, with  
>>> format=html
>>> appended to the query string, although it would be nice to assume  
>>> that no
>>> format parameter = html by default, unless this can be set  
>>> somewhere?) and
>>> loading the correct ajax view script, it is not disabling the  
>>> layout, and i
>>> am getting a "page within a page".
>>>
>>> Any pointers on what i'm doing wrong?
>>> -- 
>>> View this message in context:
>>> http://old.nabble.com/Returning-HTML-content-from-AjaxContext-tp26148891p26148891.html
>>> Sent from the Zend Framework mailing list archive at Nabble.com.
>>>
>> 
>> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Returning-HTML-content-from-AjaxContext-tp26148891p26157122.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to