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

如何从CakePHP 2.2控制器返回JSON?,php,json,cakephp,controller,cakephp-2.2,Php,Json,Cakephp,Controller,Cakephp 2.2,我正在调用一个控制器函数: $.get("http://localhost/universityapp/courses/listnames", function(data){ alert("Data Loaded: " + data); }); 在我的控制器中: public function listnames() { $data = Array( "name" => "Sergio", "age" => 23 );

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

$.get("http://localhost/universityapp/courses/listnames", function(data){
    alert("Data Loaded: " + data);
});
在我的控制器中:

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
}
因此,我认为:

<?php echo json_encode($asdf); ?>

但是,该操作将返回整个页面,包括布局内容(页眉、页脚、导航)


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

您需要像这样禁用布局

$this->layout = null ;
现在,你的行动将变得

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
}

阅读手册上的相关内容。

设置
autoRender=false
并返回
json\u encode($code)
:-


您可以尝试以下任何一种方法来返回json响应(我在这里使用了failure case来返回json响应):

public function action() {
    $this->layout = false;
    $this->autoRender = false;
    return json_encode(array(
        'success' => 0,
        'message' => 'Invalid request.'
    ));
}

设置$this->layout=null;在里面listnames@MoyedAnsari:如果你把它写下来作为你的答案,我会接受它作为解决方案。我希望这对u+1有效,这是这个简单情况下最简单的解决方案。
public function action() {
    $this->response->body(json_encode(array(
        'success' => 0,
        'message' => 'Invalid request.'
    )));

    $this->response->send();
    $this->_stop();
}
public function action() {
    $this->layout = false;
    $this->autoRender = false;
    return json_encode(array(
        'success' => 0,
        'message' => 'Invalid request.'
    ));
}