如何从CakePHP 2.2控制器返回JSON?

ser*_*erg 7 php json controller cakephp cakephp-2.2

我正在调用一个控制器函数:

$.get("http://localhost/universityapp/courses/listnames", function(data){
    alert("Data Loaded: " + data);
});
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

public function listnames() {
    $data = Array(
        "name" => "Sergio",
        "age" => 23
    );
    $this->set('test', $data);
    $this->render('/Elements/ajaxreturn'); // This View is declared at /Elements/ajaxreturn.ctp
}
Run Code Online (Sandbox Code Playgroud)

在那个视图中:

<?php echo json_encode($asdf); ?>
Run Code Online (Sandbox Code Playgroud)

但是,Action将返回整个页面,包括Layout内容(页眉,页脚,导航).

我在这里错过了什么?如何在没有布局内容的情况下返回JSON数据?

Gui*_*ira 30

设置autoRender=false并返回json_encode($code): -

public function returningJsonData($estado_id){
    $this->autoRender = false;

    return json_encode($this->ModelBla->find('first',array(
        'conditions'=>array('Bla.bla_child_id'=>$estado_id)
    )));
}
Run Code Online (Sandbox Code Playgroud)

  • +1这种简单情况的最简单解决方案. (5认同)

Moy*_*ari 10

你需要像这样禁用布局

$this->layout = null ;
Run Code Online (Sandbox Code Playgroud)

现在你的行动将成为现实

public function listnames() {
    $this->layout = null ;
    $data = Array(
        "name" => "Sergio",
        "age" => 23
    );
    $this->set('test', $data);
    $this->render('/Elements/ajaxreturn'); // This View is declared at /Elements/ajaxreturn.ctp
}
Run Code Online (Sandbox Code Playgroud)


ADm*_*mad 7

阅读手册中有关JsonView的内容.