我有一个Cake 2.x应用程序。我需要提供一个来自PHP数组的JSON编码响应,但它没有按预期工作。
在app/Config/routes.php
我有Router::parseExtensions('json');
在我的控制器中,我有这段代码:
public function ajaxTags()
{
$this->loadModel('Tag');
$tags = $this->Tag->find('list');
var_dump($tags);
die;
}
这产生了我所期望的 - 我的'tags'
数据库表中的PHP数据数组,例如
array(4) {
[1]=> string(14) "United Kingdom"
[2]=> string(6) "France"
[3]=> string(7) ...
}
所以我想做的就是将其作为JSON编码数据。我已按照https://book.cakephp.org/2.0/en/views/json-and-xml-views.html
上的说明操作了所以在TagsController.php
的顶部我有:
public $components = array('RequestHandler');
然后我尝试使用文档中所述的_serialize
输出它。我不需要观看""为此,因为我不想做任何其他格式化:
public function ajaxTags()
{
$this->loadModel('Tag');
$tags = $this->Tag->find('list');
$this->set('_serialize', array($tags));
}
这给出了以下回应:
null
响应数据编码为Content-Type:application/json; charset=UTF-8
(我可以在浏览器的“网络”标签中看到此信息)。
我哪里错了?我知道$tags
中有数据,因为我var_dump
早些时候。为什么现在给出一个空输出?
答案 0 :(得分:2)
根据documentation,您的操作应该是这样的:
public function ajaxTags()
{
$this->loadModel('Tag');
$tags = $this->Tag->find('list');
$this->set('tags', $tags);
$this->set('_serialize', array('tags'));
}
_serialize键是一个特殊的视图变量,用于指示哪个 使用数据视图时,应该序列化其他视图变量。
您需要将变量$tags
发送到视图,以便_serialize
键知道它并将呈现它。