我试图将一个ajax请求发送到Cakephp 3控制器。
控制器将从模型中找到数据,并将其返回到要显示的同一视图,
视图和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响应始终为空,但调试工具正确显示了_serialize变量。
我已在routes.php文件中启用了json扩展。调试工具中this调用的变量如下
如果有人可以指导从ajax响应中的debugkit中获取变量,我将不胜感激
先感谢您
看起来你是密切,除了如何误会_serialize
(也许无论是set
或compact
)的作品。请查看手册以获取所有详细信息,但是您应该在其中设置变量名称_serialize
列表或将所有内容序列化。true
另外,如果您使用compact
with ,则为set
它指定变量的名称,而不是变量本身。
因此,您应该在此处使用的内容可能是:
$this->set(compact('result'));
$this->set('_serialize', ['result']);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句