Laravel 路由上的 Ajax 调用,返回一个包含 ChartJS 标签日期的 json 编码数组

Posted

技术标签:

【中文标题】Laravel 路由上的 Ajax 调用,返回一个包含 ChartJS 标签日期的 json 编码数组【英文标题】:Ajax call at Laravel route that returns an json encoded array containing dates for ChartJS labels 【发布时间】:2019-05-20 05:36:50 【问题描述】:

我有一个 Laravel 5.7 项目,带有 ajax 和 ChartJS。

在页面加载时,我正在对“action_route”进行 ajax 调用,它会返回我的 ChartJS 的标签。 php函数是json编码标签数组,ajax解码。

function get_data($year) 
    $test = \DB::select( \DB::raw("
        SELECT 
            DATE_FORMAT(date_for,'%c/%y') AS 'month',
            col1,
            col2,
            col3
        FROM test
        WHERE
            AND YEAR(date_for) = '" . $year . "'
        GROUP BY month
        ORDER BY month ASC
    ") );

    return $test;


public function action_route() 
   $data = self::get_data(2018);
   foreach($data as $x) 
      $labels[] = $x->month;
   


return view('/test/get_data', [
     'labels' => json_encode($labels)
]);

DATE_FORMAT(date_for,'%c/%y') AS 'month' - 因为如果这种格式需要日期:'01/18'、'02/18' 等。

在模板中:

var labels = JSON.parse(' $labels ');

问题 这就是 get 放入 html 中的内容。

【问题讨论】:

【参考方案1】:

当使用 时,laravel 会转义它显示的数据。要阻止它转义数据,您应该将其包装在 !! !! 中,即

var labels = JSON.parse('!! $labels !!');

欲了解更多信息,您可以查看Docs

【讨论】:

图表现在出现了,但还是不行,我得到的标签是:“1%2B18”、“10%2B18”。我认为这是某种 HTML 问题,它正在转换字符 它可以工作 - 抱歉之前的评论。我自己尝试了一些破坏它的东西。谢谢 @JohnDoe 没关系,我很高兴能帮上忙。只是出于好奇,您为什么使用原始查询而不是 Eloquent?您是否为 test 表设置了 Eloquent 模型? 因为它是一个非常复杂的查询,使用 Eloquent 是不可能的,这只是一个简单的例子,实际的查询是巨大的。 (我有模型和控制器) @JohnDoe Ah 很公平。

以上是关于Laravel 路由上的 Ajax 调用,返回一个包含 ChartJS 标签日期的 json 编码数组的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 调用 Laravel 路由

如何在 AJAX 调用中获取 JavaScript 变量作为 Laravel 路由名称

在 Ajax 调用中传递完整 URL 作为参数 - Laravel 5.1 路由

laravel 5 根据路由返回 HTML 或 JSON

在 Laravel 8 中使用 API 路由时返回错误

Ajax 在 Laravel 8 中返回 404 错误但路由存在