0

我正在使用 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 片段,这样我就不能key => values在标准 json 对象中发回多个。我希望能够将 html 片段和纯文本作为 json 发送。

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

4

1 回答 1

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');
    }
}

请参阅文档中的“使用带有视图文件的数据视图”。

于 2012-05-30T02:02:57.773 回答