在 Laravel 中将 JSON 传递给 Javascript – 但 JS 正在将 JSON 转换为 HTML 实体

Passing JSON to Javascript in Laravel – but JS is converting the JSON to HTML Entities

在我的 Laravel 控制器中,我正在创建一个多维关联数组:

$trendChart = Array (
    "series" => Array (
        "data" => Array(1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5)
    ),
    "xaxis" => Array (
        "categories" => Array ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
    ),
    "chart" => Array (
        "type" => "line",
        "height" => 350,
    ),
    "stroke" => Array (
        "curve" => "smooth",
    ),
    "dataLabels" => Array (
        "enabled" => false,
    ),
    "fill" => Array (
        "colors" => Array ("#006ba6", "#f23f2b", "#f3f3f3")
    ),
    "annotations" => Array (
        "yaxis" => Array (
            "y" => 4.8,
            "borderColor" => "rgba(155, 199, 0, 1)",
            "borderWidth" => 3,
            "label" => Array(
                "borderColor" => "rgba(155, 199, 0, 1)",
                "style" => Array(
                    "color" => "#fff",
                    "background" => "rgba(155, 199, 0, 1)",
                ),
                "text" => "Ideal Average",
            ),
        ),
    ),
);

然后我将其编码为 JSON,其中:

$defaultChartOptions = json_encode($trendChart);

然后我将 $defaultChartOptions 传递到我的视图中:

return view('myview')->with(['defaultChartOptions' => $defaultChartOptions]);

在我看来,我有以下JS:

var chartOptions = JSON.parse({{$defaultChartOptions}});

郑重声明,我也尝试过不使用 JSON.parse 命令。无论哪种方式,当它传递给 JS 时,所有引号都已转换为 HTML 实体。查看页面源码,是这样的:

var chartOptions = {"series":{"data":[1,1,2,2,3,3,3,3,4,4,4,5]},"xaxis":{"categories":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},"chart":{"type":"line","height":350},"stroke":{"curve":"smooth"},"dataLabels":{"enabled":false},"fill":{"colors":["#006ba6","#f23f2b","#f3f3f3"]},"annotations":{"yaxis":{"y":3,"borderColor":"rgba(229, 78, 78, .65)","borderWidth":3,"label":{"borderColor":"rgba(229, 78, 78, 1)","style":{"color":"#fff","background":"rgba(229, 78, 78, 1)"},"text":"Your Average"}}}}

我在这里错过了什么?

相反,做

var chartOptions = JSON.parse({{$defaultChartOptions}});

做:

这将防止数据被转义

var chartOptions = {!! ($defaultChartOptions) !!};

您只需更改即可获得:

var chartOptions = JSON.parse({{$defaultChartOptions}});

至:

var chartOptions = {!! ($defaultChartOptions) !!};

你的问题就迎刃而解了。