laravel获取要传递给laravel blade的数据,但采用json格式

k4ymrczo  于 2022-12-14  发布在  其他
关注(0)|答案(4)|浏览(158)

我有一些数据,我正在使用d3.js创建一个图表。我有一部分工作与硬编码的数据一样

var data = {
            "name": ["A", "B", "C", "D", "E"],
            "vals": [48, 35, 34, 21, 11]
        }

我正在努力的地方是把数据放到我的blade模板的javascript部分。我试着硬编码下面的代码,我得到了一个htmlspecialchars(),期望参数1是字符串,给定对象。

$test = json_encode([
            "name" => ["A", "B", "C", "D", "E"],
            "vals"=> [48, 35, 34, 21, 11]
        ]);

在刀片的脚本区域中

var test = {{json_decode($test)}};

如果我不执行json_decode,我不会得到错误,但它会将我的“to”转换为“,这显然是行不通的。
我知道我只是在这里错过了一些东西,使它工作,但也许我会做一个新的方法,并做一个 AJAX 调用得到它。
任何想法或提示都会很有帮助

b5buobof

b5buobof1#

只需使用未转义的输出:

<script>
    var array = {!! json_encode($array) !!};
</script>

或者

<script>
    var array = @json($array);
</script>

PHPSorm中的两个变体都将突出显示此行并显示错误-需要表达式
所以,我的完整答案是:

<script>
    var array = [].concat(@json($array));
</script>
yftpprvb

yftpprvb2#

您需要输出未转义的值-var test = {!! $test !!}
如果从数据库或模型中获取值,可以考虑使用toJson()帮助器。

ovfsdjhp

ovfsdjhp3#

@fubar的解决方案对我很有效,只是做了一个小改动。@json($geoJson)的解决方案不行。但那是因为我没有把数组而是一个字符串放进函数中。我不得不为我扩展@fubar的方法:

const data = JSON.parse(' {!! $geoJson !!} ');
console.log('data', data);

单引号很重要。

pjngdqdw

pjngdqdw4#

最新Laravel 9中推荐的方法是:

<script>
    var app = {{ Js::from($array) }};
</script>

它使用了JSON.parse(...)方法,与@ MaikLowrey的答案相同
https://laravel.com/docs/9.x/blade#rendering-json

相关问题