将数据以JSON格式传递给Laravel Blade的方法

6

我正在使用d3.js创建图表,需要用到一些数据。目前已经通过硬编码的方式使图表能够正常显示。

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

我遇到的问题是如何将数据传递到我的 blade 模板中的 javascript 部分。我已经尝试了下面的硬编码方式,但出现了“htmlspecialchars() expects parameter 1 to be string, object given”错误提示。
$test = json_encode([
            "name" => ["A", "B", "C", "D", "E"],
            "vals"=> [48, 35, 34, 21, 11]
        ]);
在这个代码区域中使用该代码:
var test = {{json_decode($test)}};

如果我不做json_decode,就不会出错,但它会将我的“转换为"这显然不起作用。
我知道我只是缺少一些东西让它能工作,但也许我会写一个新的方法,并进行ajax调用来获取它。
任何想法或提示都将有所帮助。
4个回答

11

直接使用未转义的输出:

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

或者

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

PHPStorm中的两个变体都会将此行突出显示为错误 - 表达式期望

因此,我的完整答案是:

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

5

您需要输出未经转义的值 - var test = {!! $test !!}

如果您从数据库或模型获取值,可以考虑使用toJson()助手。


知道这是一些简单的东西。谢谢。 - Chris

2

@fubar的解决方案对我有用。只需要做出一点小改变。解决方案@json($geoJson)不行。但这是因为我没有将数组放入函数中,而已经是一个字符串了。我必须根据@fubar的方法对其进行扩展:

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

单引号很重要。

1
太疯狂了!我一直在寻找解决方案,结果发现了自己的答案!*笑 / 而且它还帮助了我... - Maik Lowrey

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接