在cakePHP中json序列化后回显一些东西

时间:2012-11-27 20:09:19

标签: php json cakephp jsonp cakephp-2.0

如何在cakePHP json / xml响应结束时回显一些内容?

我需要这个才能添加JSONP支持(因为我需要在开头添加回调和');'最后

控制器使用:

public function json() {

     //...code to populate $jsonObjects

     $this->set('objetos',$jsonObjects);
     $this->set('_serialize', 'objetos');
}

1 个答案:

答案 0 :(得分:4)

首先,我假设您已设置路由以正确处理JSON / XML响应

在路线档案中:

Router::parseExtensions('json');

其次,您需要确保对您的示例的调用使用.json扩展名,或者Accept标题为application/json

然后检查控制器中的回调

public function json() {

    //...code to populate $jsonObjects

    // check for callback and set it
    // note: you should do Sanitize::clean() or something like that to
    // prevent code injection
    if ($this->request->params['callback']) {
        $this->set('callback', $this->request->params['callback']);
    }

    $this->set('objetos',$jsonObjects);
    $this->set('_serialize', 'objetos');
}
你的视图文件中的

(例如:View / Users / json / index.ctp)你应该有这样的东西:

if (isset($callback)) {
    echo $callback . '('.json_encode($objetos).')';
} else {
    echo json_encode($objetos);
}

我使用类似的东西,但没有测试上面的确切示例,所以你可能需要清理它。还要确保清理回调var,这样就不会通过输出查询字符串参数中的确切内容来保留安全漏洞。