首页 > 解决方案 > 使用 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 的干净方法是什么?在这种情况下推荐的方法是什么?

标签: phpjsonlaravellaravel-5laravel-5.6

解决方案


找到了 Laravel 5.6 Blade 引擎推荐的方法:

sessionStorage.setItem('vueModel', JSON.stringify(@json($vueModel)));

使用 @json刀片指令是将 PHP 数组转换为前端 JSON 对象的一种很好且方便的方法。

然后基本上避免编码问题......在前端你执行以下操作:

让 vModel = JSON.parse( ...您的 PHP 数组的 JSON 字符串表示)!

所以这样你就可以在 JS 前端获得一个干净的 JSON 对象,而不必担心编码问题。


推荐阅读