无法从Cakephp 3控制器获得json响应

时间:2016-07-03 11:17:25

标签: javascript php json ajax cakephp-3.0

我正在尝试向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中此调用的变量如下

debugkit varables

如果有人可以指导从ajax响应中的debugkit获取变量,我将不胜感激

提前谢谢

1 个答案:

答案 0 :(得分:2)

看起来你很接近,除了误解_serialize(可能是setcompact)的工作方式。查看the manual了解所有详细信息,但您应在_serialize中设置的是名称变量的列表,或者true来序列化所有内容。

此外,如果您将compactset一起使用,则为其提供 变量的名称,而不是变量本身。

那么,你应该在那里使用的可能是:

$this->set(compact('result'));
$this->set('_serialize', ['result']);