我正在使用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
组件。
答案 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”。