我正在尝试向Cakephp 3控制器发送ajax请求。
控制器将从模型中找到数据并将其返回到要显示的同一视图
视图和js功能如下
<script type = "text/javascript" language = "javascript">
$(document).ready(function(){
$("button").click(function(){
$.ajax({
type : "POST",
url : "<?php echo $this->Url->build(['controller' => 'users', 'action' => 'getByCategories', '_ext' => 'json']); ?>",
success: function (data){
console.log(JSON.stringify(data));
}
});
});
});</script>
以上功能位于控制器的索引视图中。
点击按钮后,请求将被发送到同一控制器中的getByCategories函数。
getByCategories函数如下
public function getByCategories()
{
$id = 33;
$this->request->allowMethod(['ajax']);
$this->autoRender = false;
$cat = $this->Users->Categories->get($id);
if ($this->Users->Categories->childCount($cat) > 0)
{
$result = $this->Users->Categories->find('all', ['conditions' => ['parent_id' => $id]]);
$this->set(compact($result));
$this->set('_serialize', $result);
}
else
{
$result['Machines'] = $this->Users->Machines->find('all', ['conditions' => ['category_id' => $id]]);
$result['Medias'] = $this->Users->Medias->find('all', ['conditions' => ['category_id' => $id]]);
$this->set(compact($result));
$this->set('_serialize', $result);
}
}
此函数的ajax响应总是为空,但debugkit正确显示_serialize变量。
我在routes.php文件中启用了json扩展。 debugkit中此调用的变量如下
如果有人可以指导从ajax响应中的debugkit获取变量,我将不胜感激
提前谢谢
答案 0 :(得分:2)
看起来你很接近,除了误解_serialize
(可能是set
或compact
)的工作方式。查看the manual了解所有详细信息,但您应在_serialize
中设置的是名称变量的列表,或者true
来序列化所有内容。
此外,如果您将compact
与set
一起使用,则为其提供 变量的名称,而不是变量本身。
那么,你应该在那里使用的可能是:
$this->set(compact('result'));
$this->set('_serialize', ['result']);