0

我正在使用 PHP cake 1.1 开发 API。我想将响应写为 JSON。我发现了很多 PHP Cake 1.2 或 1.3 的内容,但不是 1.1。

这是我的控制器代码

function index() {
   $this->layout = 'ajax';
   $this->RequestHandler->setContent('json', 'application/json');
   $members['id'] = '001100';        
   $this->set(compact('members'));    
}

这是查看代码

echo json_encode($members);

我的问题是,响应内容类型仍然是Content-Type: text/html

有什么方法我不必为每个函数创建视图而只需编写json.

请帮帮我。

谢谢,阿迪尔

4

3 回答 3

1

在 CakePHP 1.2 中,如果将 autoRender 设置为 false 并从控制器操作返回一个值,它将直接输出。您可能需要指定一个 Content-Type。

function index() {
    $this->autoRender = false;
    $this->RequestHandler->respondAs('json'); // or $this->RequestHandler->respondAs('application/json'); if json is not set up with CakePHP 1.1
    $members['id'] = '001100';        
    return json_encode($members);    
}

我无法立即访问 CakePHP 1.1 代码库,因此您可能需要检查 dispatcher.php,特别是 _invoke() 方法,以确保在 autoRender 为设置为假。

我强烈建议升级到 CakePHP 2.1,它包括一个可用于提供 json 响应的 JsonView。

function index() {
    $this->view = 'Json';
    $members['id'] = '001100';
    $this->set(compact('members'));        
    $this->set('_serialize', array('members'));    
}
于 2012-05-03T06:45:20.370 回答
0

试试这个:

function index() {
   $this->autoRender = false;
   /**
     * leave this two lines
     *
     * $this->layout = 'ajax';  // leave it
     * $this->RequestHandler->setContent('json', 'application/json'); 
     *
     */

   // your process to get $members
   $members['id'] = '001100';        
   $this->set('members');    
}

由于您的视图代码很好。

于 2012-04-30T08:23:45.310 回答
0

我不确定我是否 100% 理解了这个问题,但如果您只是想在 JSON 字符串中输出一些内容,请查看此链接:

http://techno-geeks.org/2009/08/easy-json-with-cakephp-and-jquery/

于 2012-04-29T11:27:55.817 回答