未捕获的TypeError:无法读取CanvasJS中未定义的属性“ getTime”

时间:2018-10-15 10:53:46

标签: javascript html google-apps-script canvasjs

更新CanvasJS图表的数据点时遇到问题,错误消息显示

  

“未捕获的TypeError:无法读取未定义的属性'getTime'”。

我也尝试使它成为这样的对象

var parLabels = JSON.stringify(labels);     
var obj = JSON.parse(parLabels);

它仍然不起作用。

index.html

<div id="chartContainer" style="height: 300px; width: 100%;"></div>

<script type="text/javascript>
$(function() {
  google.script.run.withSuccessHandler(showDaily).getData();
});
function showDaily(myObj) {
  var email = myObj.email;
  var entity = myObj.entity;
  var entity = JSON.parse(entity);
  var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
  var labels = '';
  for (var i = 1; i < entity.length; i++) {
    var month = new Date(entity[i][0]).getMonth();
    var day = new Date(entity[i][0]).getDate();
    var date = day + " " + monthNames[month];
    var score = entity[i][7];
    if (entity[i][2] != '') {
      if (labels != "") {
        labels = labels + ",{label:" + date + ",y:" + score + "}";
      } else {
        labels = "{label:" + date + ",y:" + score + "}";
      }
    }
  }
  var chart = new CanvasJS.Chart("chartContainer", {
    title: {
        text: "My First Chart in CanvasJS"              
    },
    data: [              
    {
        // Change type to "doughnut", "line", "splineArea", etc.
        type: "line",
        dataPoints: [ labels ]
    }
    ]
  });
  chart.render();
}

</script>

3 个答案:

答案 0 :(得分:3)

在CanvasJS中,dataPoints应该是对象数组。但就您而言,这似乎是一个字符串。尝试将labels更改为数组并将其传递给dataPoint应该可以正常工作。

var labels = [];
for (var i = 1; i < entity.length; i++) {
    var month = new Date(entity[i][0]).getMonth();
    var day = new Date(entity[i][0]).getDate();
    var date = day + " " + monthNames[month];
    var score = entity[i][7];
    if (entity[i][2] != '') {   
        labels.push({label: date, y: score });
    }
}

然后将其作为dataPoints: labels传递。

答案 1 :(得分:1)

更改此行

<i class="las la-address-book"></i>

收件人

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

google.charts.load的第一个参数是版本名称或数字(以字符串形式)。
如果您指定“当前”,这将导致加载Google图表的最新正式版本。
如果您想尝试下一个版本的候选软件,请改用“即将发布”。
通常,两者之间几乎没有什么区别,除了正在发布新版本时,它们将完全相同。

此问题在版本45中已解决。

答案 2 :(得分:-1)

当我只有 1个数据点时,这会发生在我身上。看来这是版本46、47中的错误,因此降级至版本45(如@Pranjali Rastogi所建议的)对我有用。

对我来说,另一种解决方法是指定hAxis.viewWindow.minhAxis.viewWindow.max,以便图表可以“缩小”以显示多个hAxis刻度。