Uncaught TypeError: Cannot read property 'getTime' of undefined in CanvasJS
Uncaught TypeError: Cannot read property 'getTime' of undefined in CanvasJS
我在更新 CanvasJS 图表的数据点时遇到问题,错误消息显示
“Uncaught TypeError: Cannot read property ‘getTime’ of undefined”.
我也试过把它做成这样的对象
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>
在 CanvasJS 中,dataPoints 应该是一个对象数组。但在你的情况下,它似乎是一个字符串。尝试将 labels
更改为数组并将其传递给 dataPoints 应该可以正常工作。
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
.
传递
更改此行
google.charts.load('current', {packages: ['corechart']});
到
google.charts.load('45', {packages: ['corechart']});
google.charts.load 的第一个参数是字符串形式的版本名称或编号。
如果您指定 'current',这会导致加载 Google 图表的最新官方版本。
如果您想尝试下一个版本的候选,请改用 'upcoming'。
一般来说,两者之间的区别很小,除非正在发布新版本,否则它们将完全相同。
此问题已在版本 45 中得到解决。
当我 只有 1 个数据点 时,我就会遇到这种情况。这似乎是版本 46、47 中的错误,因此降级到版本 45
(正如@Pranjali Rastogi 所建议的那样)对我有用。
我的另一个解决方法是指定 hAxis.viewWindow.min
和 hAxis.viewWindow.max
以便图表可以 "zoom out" 显示多个 hAxis 刻度。
我在更新 CanvasJS 图表的数据点时遇到问题,错误消息显示
“Uncaught TypeError: Cannot read property ‘getTime’ of undefined”.
我也试过把它做成这样的对象
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>
在 CanvasJS 中,dataPoints 应该是一个对象数组。但在你的情况下,它似乎是一个字符串。尝试将 labels
更改为数组并将其传递给 dataPoints 应该可以正常工作。
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
.
更改此行
google.charts.load('current', {packages: ['corechart']});
到
google.charts.load('45', {packages: ['corechart']});
google.charts.load 的第一个参数是字符串形式的版本名称或编号。
如果您指定 'current',这会导致加载 Google 图表的最新官方版本。
如果您想尝试下一个版本的候选,请改用 'upcoming'。
一般来说,两者之间的区别很小,除非正在发布新版本,否则它们将完全相同。
此问题已在版本 45 中得到解决。
当我 只有 1 个数据点 时,我就会遇到这种情况。这似乎是版本 46、47 中的错误,因此降级到版本 45
(正如@Pranjali Rastogi 所建议的那样)对我有用。
我的另一个解决方法是指定 hAxis.viewWindow.min
和 hAxis.viewWindow.max
以便图表可以 "zoom out" 显示多个 hAxis 刻度。