ThinkPHP6中JSON字符串在视图中被转为实体字符的解决方法

最初发表于: 2020-04-22 17:26:26

我们可能用到, 在后端用PHP把数据传给前端JS;

但是在TP6中, 视图中的JSON会以实体字符来输出, 在用js进行JSON.parse时会报错; 因为传给js的JSON其实变成了这样

[{"id":2,"group_name":"\u6d4b\u8bd5\u7fa4"},{"id":1,"group_name":"\u6e05\u6cc9\u8bd7\u73ed"}]

可以看到, 双引号一类的东西, 都变成了实体字符, 对js解析造成不便

解决方法是: 不使用模板引擎输出, 而使用原生PHP输出

示例如下

//控制器层
    /**页面: 首页 */
    public function index()
    {
        // 查询我的群组
        $group = Db::table('group_relationship')
            ->alias('r')
            ->join('group g', 'r.group_id = g.id')
            ->where('user_id', '=', 1)
            ->field('g.id,g.group_name')
            ->select()
            ->toArray();

        // 绑定数据至前端
        View::assign('group', json_encode($group));

        // 调用视图
        return View::fetch();
    }
<!-- 视图层代码 -->
<script>
    let data
    // data = JSON.parse('{$group}') # 这么写不行
    data = JSON.parse('<?= $group ?>') //这么写可以

    console.log(data)
</script>

通过在浏览器查看代码, 我们可以看到视图已经被解析成了这样