我正在使用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=>value 对) 将其设置为使用 Cake 2.1 提供的 JsonView 从我的控制器作为 json 发送回?我已经在我的路由文件中设置了Router::parseExtensions('json');
并且我将RequestHandler
组件包含在我的应用程序控制器中。
使用数据视图时,不需要对 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');
}
}
请参阅文档中的"将数据视图与视图文件结合使用"。