Json 防止socialengine渲染视图(对于AJAX)

Json 防止socialengine渲染视图(对于AJAX),json,ajax,layout,socialengine,Json,Ajax,Layout,Socialengine,默认情况下,SocialENgine会在每个控制器操作结束时自动渲染视图。如果您使用的是布局,它也会渲染该布局。这对于普通的Web页面来说很好,但是当您发送AJAX响应时,您并不需要这些。如何防止SocialEngine逐个动作自动渲染?使用ZendFramework,您可以执行以下操作: $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(TRU

默认情况下,SocialENgine会在每个控制器操作结束时自动渲染视图。如果您使用的是布局,它也会渲染该布局。这对于普通的Web页面来说很好,但是当您发送AJAX响应时,您并不需要这些。如何防止SocialEngine逐个动作自动渲染?使用ZendFramework,您可以执行以下操作:

$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(TRUE);
您可以访问一些很好的助手,如:

$this->_helper->json($data);
。。。它将json_编码您的$data,用json头输出它,并最终消亡,因此在没有视图呈现的情况下从操作中返回干净的json,这正是我想要的


但是,这些解决方案在SocialEngine中都不起作用--$this->\u帮助程序似乎总是一个空数组,就像$this->view->\u帮助程序一样。并返回$this->setNoRender()只阻止当前元素呈现,而不是整个页面。

在一些默认小部件中,我发现了这个函数调用,它完全抑制了小部件的呈现:

return $this->setNoRender();
如果您感兴趣,它将在Engine\u Content\u Widget\u Abstract中实现

最好的,
Benni.

我在小部件控制器的上下文中遇到了这个问题

我访问json()帮助程序的解决方案是创建并实例化一个扩展抽象Core_Controller_Action_标准的具体类,并公开一个包装器方法以在小部件的Controller.php文件中发送json:

class Widget_MyWidgetAjaxController extends Core_Controller_Action_Standard
{
    public function sendjson($data) {
        return $this->_helper->json($data);
    }
}
这在小部件的控制器中使用,如下所示:

class Widget_MyWidgetController extends Engine_Content_Widget_Abstract
{
    public function indexAction() 
    {
        // This is an ajax request to our widget controller
        if ($this->getRequest() && $this->getRequest()->isPost()) {

            // Do whatever processing you need 
            // [...]
            $response_data=array('hello','world');

            $ajax = new Widget_TrackablesAjaxController(
                $this->getRequest(), 
                new Zend_Controller_Response_Http
            );

            return $ajax->sendjson($response_data);
        }
    }
}
我不必显式禁用Layout()或setNoRender()。通过_helper->json()响应就足够了