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

如何将静态Google Charts JSON图表改造为实时动态双图表同页展示

双图表动态集成实现方案

1. 基础页面结构搭建

先引入Google Charts依赖,给两个图表预留渲染容器,示例代码:

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <style>
    /* 自定义图表容器尺寸,可按需调整 */
    #line-chart { width: 100%; height: 400px; margin: 20px 0; }
    #gauge-chart { width: 100%; height: 300px; margin: 20px 0; }
  </style>
</head>
<body>
  <div id="line-chart"></div>
  <div id="gauge-chart"></div>
</body>
</html>

2. 封装独立的图表渲染函数

两个图表的渲染逻辑完全拆分,互不影响,各自调用对应的PHP接口拉取数据:

// 折线图渲染函数
async function drawLineChart() {
  try {
    // 替换为你的折线图数据PHP接口地址
    const res = await fetch('/api/line_chart_data.php', { cache: 'no-store' });
    const rawData = await res.json();
    const data = google.visualization.arrayToDataTable(rawData);
    
    // 这里复用你之前单图表测试时的option配置即可
    const options = {
      title: '折线图标题',
      curveType: 'function',
      legend: { position: 'bottom' }
    };

    const chart = new google.visualization.LineChart(document.getElementById('line-chart'));
    chart.draw(data, options);
  } catch (err) {
    console.error('折线图数据加载失败:', err);
  }
}

// 仪表盘渲染函数
async function drawGaugeChart() {
  try {
    // 替换为你的仪表盘数据PHP接口地址
    const res = await fetch('/api/gauge_data.php', { cache: 'no-store' });
    const rawData = await res.json();
    const data = google.visualization.arrayToDataTable(rawData);

    // 这里复用你之前单图表测试时的option配置即可
    const options = {
      width: 400, height: 300,
      redFrom: 90, redTo: 100,
      yellowFrom:75, yellowTo: 90,
      minorTicks: 5
    };

    const chart = new google.visualization.Gauge(document.getElementById('gauge-chart'));
    chart.draw(data, options);
  } catch (err) {
    console.error('仪表盘数据加载失败:', err);
  }
}

3. 初始化与定时刷新逻辑

全局初始化时同时加载两个图表所需的依赖,首次渲染完成后启动定时刷新:

// 加载Google Charts所需的两个图表包,不要遗漏
google.charts.load('current', {'packages':['corechart', 'gauge']});
google.charts.setOnLoadCallback(initCharts);

function initCharts() {
  // 首次渲染两个图表
  drawLineChart();
  drawGaugeChart();

  // 定时刷新,单位为毫秒,以下示例为每3秒刷新一次
  // 如需两个图表刷新频率不同,可分别设置setInterval
  setInterval(() => {
    drawLineChart();
    drawGaugeChart();
  }, 3000);
}

注意事项

  • 无需修改现有PHP接口的返回结构,保持和单图表测试时的JSON格式一致即可
  • 两个渲染逻辑完全独立,单个接口请求失败不会影响另一个图表的正常展示
  • 建议在PHP接口侧添加header('Cache-Control: no-cache, no-store, must-revalidate');响应头,避免浏览器缓存旧数据
  • 如需调整刷新频率,直接修改setInterval的第二个参数即可,折线图、仪表盘也可单独设置不同的刷新间隔

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:54:04