You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不刷新页面时为Chartist柱状图实时注入数据

解决Chartist柱状图异步数据更新问题

你的问题核心在于异步请求的特性:$.get是异步操作,getChartData()不会立即返回请求到的数据,而是要等AJAX请求完成后才能拿到。直接把getChartData()放到series参数里,此时数据还没返回,自然无法正确渲染图表。下面是具体的解决方案:

步骤1:重构数据获取与图表更新逻辑

我们需要把数据获取和图表更新绑定在一起,确保拿到数据后再渲染/更新图表。同时优化定时器,避免请求还没完成就发起下一次请求。

修改后的JavaScript代码

// 定义图表实例变量,方便后续更新
let barChartInstance = null;

// 获取数据并更新图表的函数
function fetchAndUpdateChart() {
  $.get("tickets/chart/firstresponse", function(data) {
    console.log(data);
    // 调用图表更新函数,传入新数据
    updateBarChart(data);
    // 请求完成后,再设置下一次定时,避免重叠请求
    setTimeout(fetchAndUpdateChart, 10000); // 改为10秒,符合你的需求
  })
  .fail(function() {
    console.error("获取图表数据失败");
    // 失败后也重新尝试
    setTimeout(fetchAndUpdateChart, 10000);
  });
}

// 更新图表的函数,接受数据作为参数
function updateBarChart(seriesData) {
  // 如果已有图表实例,先销毁
  if (barChartInstance) {
    barChartInstance.detach();
  }
  
  // 创建新的图表实例
  barChartInstance = new Chartist.Bar('.ct-chart', {
    labels: ['8', '30', '60', '90', '180'],
    series: seriesData
  });
}

// 初始化调用
fetchAndUpdateChart();

步骤2:确保Laravel控制器返回正确格式

你的控制器代码目前返回的是数组,Laravel会自动把它转为JSON响应,这没问题,但可以明确指定返回JSON,让响应更规范:

public function firstResponseChart(){ 
  $array = [['1','2','3','4','5']]; 
  return response()->json($array);
}

关键说明

  • 异步请求处理:不再试图从getChartData返回数据,而是在AJAX的成功回调里直接处理图表更新,这样能保证拿到数据后再操作图表。
  • 定时器优化:把setTimeout放在AJAX请求的成功/失败回调里,确保上一次请求完成后再发起下一次,避免同时存在多个未完成的请求。
  • 图表实例管理:保存图表实例引用,更新前先销毁旧实例,避免DOM中残留旧的图表元素。

如果后续需要更平滑的更新效果,可以使用Chartist的update方法,而不是每次创建新实例:

function updateBarChart(seriesData) {
  if (!barChartInstance) {
    // 第一次初始化
    barChartInstance = new Chartist.Bar('.ct-chart', {
      labels: ['8', '30', '60', '90', '180'],
      series: seriesData
    });
  } else {
    // 后续直接更新数据
    barChartInstance.update({
      labels: ['8', '30', '60', '90', '180'],
      series: seriesData
    });
  }
}

内容的提问来源于stack exchange,提问作者Danishan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:17:55