我目前正在将我最新的应用程序之一升级到cakePHP 2.3,它包含许多JavaScript / AJAX内容。
我有以下代码:
function do_stuff() {
$html_content = $this->render('/elements/my_element');
$status = 'success';
$this->set('html_content', $html_content);
$this->set('status', $status);
$this->set('_serialize', array('html_content', 'status'));
}
我通过AJAX用https://mydomain.tld/controller/do_stuff.json
调用该函数当然,我希望收到一个带有{'html_content':'...','status':'success'}的JSON对象,
但我只收到html_content。我想,这是由于$ this-> render()调用。
有人提出这个问题的提示/解决方案吗?
答案 0 :(得分:3)
我不知道它是黑客还是好代码。但这在运行CakePHP 2.3时非常好用
function do_stuff() {
// modified below two lines
$this->View = $this->_getViewObject();
$html_content = $this->View->render('/Elements/main_menu');
$status = 'success';
$this->set('html_content', $html_content);
$this->set('status', $status);
$this->set('_serialize', array('html_content', 'status'));
}
答案 1 :(得分:1)
如果要在其他位置(EventListener,Model,Controller ...)渲染视图,可以执行以下操作:
$View = new View();
$html_content = $View->element('/Elements/main_menu', array(
'foo'=>'bar'
));
然后,您可以序列化您的html内容。