使用CakePHP中的JsonView返回HTML片段

时间:2012-05-29 23:33:56

标签: php cakephp cakephp-2.0 json

我正在使用Cake 2.1,随之而来的是新的JsonView。我想要做的是POST到我的控制器中的方法并渲染一个html片段,以便我可以将它作为json中的值返回。

以前我会做这样的事情:

public function ajaxSubmit() {
    if (!$this->request->is('ajax')) {
        $this->redirect('/');
    } else {
        $this->autoRender = $this->layout = false;

        $message = 'Please enter a message';
        $this->set('message');
        $errorFragment = $this->render('/Elements/errors/flash_error');
        $toReturn = array('errorFragment' => $errorFragment);
        return json_encode($toReturn);
    }
}

只返回该特定flash_error元素的html片段,这样我就不能在标准的json对象中发送多个key => values。我希望能够发送html片段和纯文本作为json。

所以我的问题是,如何渲染HTML元素并使用(key =>值对)设置它以使用Cake 2.1提供的JsonView从我的控制器作为json发回?我已经设置了我的路由文件Router::parseExtensions('json');,并且我在我的AppController中包含了RequestHandler组件。

1 个答案:

答案 0 :(得分:0)

使用数据视图时,您不需要为AJAX单独执行操作。使用可以使用与非AJAX提交相同的操作。

但是假设您希望对AJAX使用不同的操作,因为我不知道您的其他操作是什么样的,您可以在app/View/ControllerName/json/ajaxSubmit.ctp中编写类似的内容。

<?php
$errorFragment = $this->element('errors/flash_error');
$toReturn = array('errorFragment' => $errorFragment);
echo json_encode($toReturn);

然后将您的操作更改为此

public function ajaxSubmit() {
    if (!$this->request->is('ajax')) {
        $this->redirect('/');
    } else {
        $message = 'Please enter a message';
        $this->set('message');
    }
}

请参阅文档中的“Using a data view with view files”。