JavaScript饼图函数和回调仅显示数据库中的最后一个元素

时间:2018-07-31 23:51:50

标签: javascript google-pie-chart

我试图根据我的测验中有多少个问题来创建动态数量的饼图,但是创建该图的功能处于for循环中,只有1个饼图与数据库中最后的数据一起显示。 / p>

var l = 0;
for (var j in quizs[i].quests) {
if (val == quizs[i].quests[j]["quizId"]) {
    l = l + 1;
    google.charts.load('current', {
        'packages': ['corechart']
    });
    google.charts.setOnLoadCallback(drawChart);
    alert("before++" + quizs[i].quests[j]["question"]);

    function drawChart() {

        alert("in++" + quizs[i].quests[j]["question"]);
        var data = google.visualization.arrayToDataTable([
            ['Task', 'Hours per Day'],
            ['Work', 11],
            ['Eat', 2],
            ['Commute', 2],
            ['Watch TV', 2],
            ['Sleep', 7]
        ]);
        var options = {
            title: 'My Daily Activities'
        };
        var chart = new google.visualization.PieChart(document.getElementById(l));
        chart.draw(data, options);
    }
}
}

例如alert("in++" + quizs[i].quests[j]["question"]);是数据库中的最后一个元素,任何答案都是值得的。

1 个答案:

答案 0 :(得分:0)

google.charts.setOnLoadCallback必须仅支持一个回调。您应该将循环放入回调中,而不是尝试为每次循环迭代加载新的Google Charts API:

google.charts.setOnLoadCallback(() => {
  var l = 0;
  for (var j in quizs[i].quests) {
    if (val == quizs[i].quests[j]["quizId"]) {
      l = l + 1;
      var data = google.visualization.arrayToDataTable([
        ['Task', 'Hours per Day'],
        ['Work', 11],
        ['Eat', 2],
        ['Commute', 2],
        ['Watch TV', 2],
        ['Sleep', 7]
      ]);

      var options = {
        title: 'My Daily Activities'
      };
      var chart = new google.visualization.PieChart(document.getElementById(l));
      chart.draw(data, options);
    }
  }
});

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