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

Google Charts中Ajax传递JSON至drawChart()时$.each函数失效问题

解决Google Charts中$.each无法正确渲染JSON数据的问题

嘿,我看你在尝试把Ajax成功回调里的JSON数据传给Google Charts的drawChart()函数时,碰到了$.each没法正常渲染数据的问题,咱们来一步步拆解和解决它!

先看看你代码里的核心问题

你目前的写法里,直接把$.each循环嵌入到了google.visualization.arrayToDataTable()的参数里,这是典型的语法错误。arrayToDataTable需要接收一个标准的二维数组(表头+数据行),而你现在的写法既混淆了对象和数组的语法,又试图把循环逻辑直接塞到函数参数里,自然没法生成正确的数据结构。

你的原代码片段:

google.charts.load('current', {'packages':['barchart']});
google.charts.setOnLoadCallback(drawChart);
var resp_data=JSON.parse(response.msg);
function drawChart() {
  var data = google.visualization.arrayToDataTable({
    $.each(resp_data, function(key,val){
      [val.userid, val.ncpu],
    });
  });
  var options = {'title':'...'

修正方案:先构建完整数组,再传入图表函数

正确的做法是先初始化一个包含表头的二维数组,然后用$.each遍历你的JSON数据,把每一行数据push到数组里,最后再把这个完整的数组传给arrayToDataTable。另外还要注意几个细节:

1. 修正图表包名

Google Charts的柱状图官方推荐使用'bar'包,而不是旧的'barchart',这个小细节别忽略~

2. 正确构建数据数组

google.charts.load('current', {'packages':['bar']});
google.charts.setOnLoadCallback(drawChart);

// 假设这是你Ajax成功后解析得到的resp_data
// var resp_data = JSON.parse(response.msg);

function drawChart() {
  // 第一步:初始化数据数组,第一个元素是表头,根据你的字段调整
  var chartData = [
    ['用户ID', 'CPU使用量']
  ];

  // 第二步:用$.each遍历resp_data,把每一项数据添加到数组中
  $.each(resp_data, function(key, val) {
    chartData.push([val.userid, val.ncpu]);
  });

  // 第三步:把完整的二维数组传给arrayToDataTable
  var data = google.visualization.arrayToDataTable(chartData);

  // 配置图表选项
  var options = {
    title: '用户CPU使用情况统计',
    width: 600,
    height: 400
  };

  // 第四步:创建图表实例并绘制(记得页面上要有id为chart_div的元素)
  var chart = new google.charts.Bar(document.getElementById('chart_div'));
  chart.draw(data, google.charts.Bar.convertOptions(options));
}

3. 处理异步数据加载的情况

如果你的resp_data是通过Ajax异步获取的,最好把图表的加载和绘制逻辑放在Ajax的成功回调里,避免数据还没加载完就执行drawChart:

// 异步场景下的正确写法
$.ajax({
  url: '你的接口地址',
  method: 'GET', // 根据你的接口调整请求方式
  success: function(response) {
    var resp_data = JSON.parse(response.msg);
    // 加载图表包后再调用drawChart,并把数据传进去
    google.charts.load('current', {'packages':['bar']}, function() {
      drawChart(resp_data);
    });
  },
  error: function(err) {
    console.error('数据加载失败:', err);
  }
});

// 把drawChart改成接收数据参数的形式
function drawChart(dataSource) {
  var chartData = [['用户ID', 'CPU使用量']];
  $.each(dataSource, function(key, val) {
    chartData.push([val.userid, val.ncpu]);
  });
  var data = google.visualization.arrayToDataTable(chartData);
  var options = {title: '用户CPU使用情况统计'};
  var chart = new google.charts.Bar(document.getElementById('chart_div'));
  chart.draw(data, google.charts.Bar.convertOptions(options));
}

这样调整后,$.each就能正常遍历你的JSON数据,把每一行数据正确渲染到Google Charts里啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:25:36