php - 使用 Laravel 5.6 Blade 将 PHP 数组作为 JSON 字符串或 JSON 对象发送到 JS 前端
问题描述
我正在努力寻找使用 Laravel 5.6 Blade 模板将 PHP 数组作为 JSON 字符串或 JSON 对象发送到前端 JavaScript 的最佳方法。
似乎当我在 Blade 模板文件中执行以下操作时,它从未将其转换为字符串。
@php $vueModel = [ ...] @endPhp
<script>
sessionStorage.setItem('vueModel', {!! json_encode($vueModel) !!} );
...
</script>
它在 Chrome 开发工具中显示为[Object Object] 。
因此,在此之后,如果我尝试执行以下操作,它将无法正常工作(会有错误):
let model = JSON.parse(sessionStorage.getItem('vueModel'));
但是,如果我执行以下技巧,那么它会吐出字符串。
请注意 '{!! 周围的单引号 ... !!}'
<script>
sessionStorage.setItem('vueModel', '{!! json_encode($vueModel) !!}' );
...
但是,这有其自身的问题,因为现在我得到了带有反斜杠编码的引号的字符串,然后我将不得不修复它。
那么使用 laravel 5.6 Blade 模板语言将 PHP 数组作为 JSON 对象或 JSON 字符串发送到前端 JavaScript 的干净方法是什么?在这种情况下推荐的方法是什么?
解决方案
找到了 Laravel 5.6 Blade 引擎推荐的方法:
sessionStorage.setItem('vueModel', JSON.stringify(@json($vueModel)));
使用 @json刀片指令是将 PHP 数组转换为前端 JSON 对象的一种很好且方便的方法。
然后基本上避免编码问题......在前端你执行以下操作:
让 vModel = JSON.parse( ...您的 PHP 数组的 JSON 字符串表示)!
所以这样你就可以在 JS 前端获得一个干净的 JSON 对象,而不必担心编码问题。
推荐阅读
- c# - 如何使用嵌套列表反序列化 Json
- jquery - 如何过滤表
- dart - 单击按钮时有没有办法更新列表视图的项目?
- javascript - 如何展平包含数组的对象数组?
- ios - 应用发布后,可折叠的 tableview 只显示灰色条
- node.js - 使用 Microsoft Graph API 创建 Outlook 日历事件时未添加与会者
- c# - 对属性使用 Trim 会“中断”不返回任何结果的 SQL
- c++ - 使用排序方法求解 Maxium Pairwise Product
- unix - 如何使用 Jupyter Lab 或类似的 IDE 而无需每次都启动新会话
- azure - Azure:如何在部署中心修复“对象引用未设置为对象的实例”