laravel 获取要传递给 laravel Blade 的数据,但是是 json 格式

Posted

技术标签:

【中文标题】laravel 获取要传递给 laravel Blade 的数据,但是是 json 格式【英文标题】:laravel get data to pass to laravel blade but in json format 【发布时间】:2018-01-11 18:00:41 【问题描述】:

我有使用 d3.js 创建图表的数据。我让那部分工作对数据进行硬编码

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

我苦苦挣扎的地方是将数据放入刀片模板的 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,我不会收到错误,但它会将我的 " 转换为 &quot,这显然是行不通的。

我知道我只是在这里遗漏了一些东西来使它工作,但也许我会做一个新方法并做一个 ajax 调用来获取它。

任何想法或提示都会有所帮助

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

知道这很简单。谢谢。【参考方案2】:

只需使用未转义的输出:

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

或者

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

phpStorm 中的两个变体都会以错误突出显示这一行 - 预期表达式

所以,我的完整答案是:

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

【讨论】:

【参考方案3】:

@fubar 的解决方案对我有用。有一点小小的改变。解决方案@json($geoJson) 没有。但那是因为我没有将数组放入函数中,而是已经是字符串。我不得不为我扩展@fubar 的方法:

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

单引号很重要。

【讨论】:

以上是关于laravel 获取要传递给 laravel Blade 的数据,但是是 json 格式的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 如何获取选择值并将其传递给 RegisterController create()

Laravel 5:在路由中获取 ajax 数据并传递给控制器

Laravel 数据透视表获取值并传递给刀片模板

我可以将刀片变量传递给 Laravel 中的 php 变量吗?

Laravel 5.2 将变量传递给查询生成器

如何使用 laravel 将多维数组传递给 API