如何让Zend Framework在发送AJAX响应时不呈现视图/布局?

Zend的文档在这方面并不十分清楚。

问题在于,默认情况下,Zend会在每个控制器操作结束时自动呈现一个视图。 如果你正在使用布局 – 为什么不呢? – 它也呈现。 这对于普通的网页来说很好,但是当你发送一个AJAX响应的时候,你并不需要这么做。 如何防止Zend在逐个行为的基础上自动呈现?

从任何Action(s)将要发送的AJAX响应中调用此代码:

$this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(TRUE); 

这会禁用该动作的布局引擎,并closures该动作的自动视图渲染。 你可以随意“回声”,无论你想要你的AJAX输出,而不必担心正常的视图/布局的东西得到发送。

如果你的AJAX返回JSON,你可以使用JSON动作助手:

 $this->_helper->json($data); 

这个帮助程序将json_encode你的$ data,输出它与JSON头并最后死,所以我们得到干净的JSON从行动返回没有布局和视图呈现。

fe我正在使用这个构造,以避免多个ACL检查不同的行为只是为了ajax

 public function photosAction() { if ($this->getRequest()->getQuery('ajax') == 1 || $this->getRequest()->isXmlHttpRequest()) { $params = $this->getRequest()->getParams(); $result = false; switch ($params['act']) { case 'deleteImage': //deleting something ... $result = true; //ok break; default : $result = array('error' => 'Invalid action: ' . $params['act']); break; } $this->_helper->json($result); } // regular action code here ... } 

或者你可以简单地把die()函数放在操作结尾

 public function someAction() { echo json_encode($data); die(); }