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

Posted

技术标签:

【中文标题】在cakePHP中的json序列化后回显一些东西【英文标题】:echo something after json serialize in cakePHP 【发布时间】:2012-11-15 13:04:03 【问题描述】:

如何在 cakephp json/xml 响应的末尾回显某些内容?

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

控制器使用这个:

public function json() 

     //...code to populate $jsonObjects

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

【问题讨论】:

你能告诉我们你为什么需要');'在你的 json 对象的末尾?这是 API 请求所期望的吗? 是的,因为我需要正确的 jsonp 语法(例如:“mycallback(JSON_OBJECTS);”) 像@inki 所说的那样在视图中做是最好的方法。 【参考方案1】:

首先,我假设您已设置路由以正确处理 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);

我使用了类似的东西,但没有测试上面的确切示例,因此您可能需要对其进行清理。还要确保你清理了回调变量,这样你就不会因为准确地输出查询字符串参数中的内容而留下安全漏洞。

【讨论】:

如link$this->set('_serialize', 'objetos'); 输出json 而无需查看文件,所以我想我可以在没有序列化的情况下执行您的建议。你能详细解释一下 clean var 吗? 如果你在 URL 中将回调作为参数传递,你永远不会希望直接在 html 或 JS 中输出它。您可以在 book.cakephp.org/2.0/en/core-utility-libraries/sanitize.html 阅读有关数据清理的更多信息,在 tav.espians.com/… 阅读有关安全问题的更多信息 我建议使用Sanitize::paranoid($callback)

以上是关于在cakePHP中的json序列化后回显一些东西的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CakePHP 3.4 输出自定义 HTTP 正文内容?回显导致“无法发出标头”错误

select下拉框选择后回显问题

在 foreach 循环中每次迭代后 PHP 回显

vue + elementui upload上传图片到服务器以及保存后回显问题

uniapp产品编辑页-图片上传后回显编辑-组件uni-file-picker显示之前已上传的图片 + 头像图片原地覆盖上传示例

uniapp产品编辑页-图片上传后回显编辑-组件uni-file-picker显示之前已上传的图片 + 头像图片原地覆盖上传示例