在 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) !!};
你的问题就迎刃而解了。
在我的 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) !!};
你的问题就迎刃而解了。