微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

页面加载时,Chartjs 条形图显示为空

如何解决页面加载时,Chartjs 条形图显示为空

我正在使用 ChartJS 库在我的 HTML 页面显示条形图。我面临的问题是当页面加载时,它显示一个空的条形图,没有我传递给它的数据,也没有渲染条形图。单击图例后,图表会调整大小,我的标签出现在 x 轴上,第二次单击时,条形会呈现,y 轴填充到我传入的数据中。我不确定图表为什么会这样。

我使用 chart.js 文档中提供的代码测试了图表,它立即出现。我认为这个问题与我如何调用我的快速后端以从我的端点检索数据有关。

不确定如何解决此问题。任何帮助表示赞赏。

index.html:

<canvas
      id="patents-per-category-bar-chart"
      width="400"
      height="400"
    ></canvas>
<script type="text/javascript">
      var categoryLabels = [];
      var categoryValues = [];
      var centerLabels = [];
      var centerValues = [];
      $.getJSON("http://localhost:5000/api").done((data) => {

        for (let item in data.patentsPerCategory) {
          if (!data.patentsPerCategory.hasOwnProperty(item)) {
            continue;
          }
          categoryLabels.push(item);
          categoryValues.push(data.patentsPerCategory[item]);
        }

        for (let item in data.patentsPerCenter) {
          if (!data.patentsPerCenter.hasOwnProperty(item)) {
            continue;
          }
          centerLabels.push(item);
          centerValues.push(data.patentsPerCenter[item]);
        }
      });

      var ctx = document
        .getElementById("patents-per-category-bar-chart")
        .getContext("2d");
      var barChartConfig = {
        type: "bar",data: {
          labels: categoryLabels,datasets: [
            {
              backgroundColor: "blue",label: "# Patents Per Category",data: categoryValues,},],options: {
           legend: {
             onClick: null,responsive: true,scales: {
            yAxes: [
              {
                ticks: {
                  beginAtZero: true,};
      var categoryBarChart = new Chart(ctx,barChartConfig);
    </script>

从api返回的模拟数据:

{
  "category": {
    "health medicine and biotechnology": 37,"instrumentation": 38,"storage": 30,"systems": 71,"aeronautics": 1,"electronics": 47,"optics": 60,"materials": 119,"undefined": 3,"communications": 32,"sensors": 102,"robotics": 37,"software": 49,"propulsion": 9,"manufacturing": 40,"environment": 24,"aerospace": 79
  }
}

从 api 返回此数据后,我对其进行迭代并将键和值推送到单独的数组中,即 categoryLabels、categoryValues。然后将这些数组直接传入图表的标签和数据中

创建了一个jsfiddlehttps://jsfiddle.net/tkdamxr5/2/

它在 jsfiddle 环境中运行良好,所以问题一定出在我使用 jQuery 调用数据的方式上。任何人都可以澄清我需要如何调用我的快速后端来获取数据并将其传递到图表中以使其正常工作?

解决方法

想通了。在我使用的原始代码中

$.getJSON('http://localhost:5000/api').done((data) => {}

调用我的 expressjs 后端。

我改成使用

$.ajax({
url: "http://localhost:5000/api",success: function (result) {
            let labels = [];
            let data = [];
            for (let item in result.category) {
              if (!result.category.hasOwnProperty(item)) {
                continue;
              }
              labels.push(item);
              data.push(result.category[item]);
            }
       },error: function(err) { console.log(err); }
})

并且能够按预期成功显示我的条形图。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?