chartjs;无法读取未定义的属性“0”
2014-09-29
8753
我想使用 chartjs 创建一个条形图。数据通过 $.ajax 检索。从 $.ajax 检索到的 JSON 数据稍后将添加到数据集。但是,当我要创建 chartjs 时。Chart.js 库出现错误:
Uncaught TypeError: Cannot read property '0' of undefined
加载完 ajax 后,我检查了所有数据。JSON 没有问题(我已经检查了控制台)。此外,当我检查时,
myBarChart
类型被报告为未定义。甚至在我检索完 JSON 数据后,我已经为自己分配了一个新的 chartjs。
这是一个 JavaScript 代码:
var driverCode, driverPointsGained = "";
var exLabel = new Array();
var exPoints = new Array();
var chartData;
var myBarChart;
var ctx = document.getElementById("driverStandingChart").getContext("2d");
//var ctx = $("#driverStandingChart").get(0).getContext("2d");
Chart.defaults.global.responsive = true;
function addChartData(codename, pointsgained) {
chartData = {
label: codename,
datasets: [
{
fillColor: "rgba(151,187,205,0.5)",
strokeColor: "rgba(151,187,205,0.8)",
highlightFill: "rgba(151,187,205,0.75)",
highlightStroke: "rgba(151,187,205,1)",
data: pointsgained
}
]
};
return chartData;
}
$("#testAjaxLoading").click(function (e) {
e.preventDefault();
$.ajax({
url: "http://ergast.com/api/f1/current/driverStandings.json",
dataType: "json",
success: function (data) {
console.info(data);
for (var i = 0; i <= data.MRData.total-1; i++) {
driverCode = data.MRData.StandingsTable.StandingsLists[0].DriverStandings[i].Driver.code;
driverPointsGained = data.MRData.StandingsTable.StandingsLists[0].DriverStandings[i].points;
console.info("code: " + driverCode + " points: " + driverPointsGained);
//push data to array
exLabel.push(driverCode);
exPoints.push(driverPointsGained);
}
addChartData(exLabel,exPoints);
console.log(chartData);
myBarChart = new Chart(ctx).Bar(chartData);
alert("finished retrieve data");
},
error: function (err) {
console.error(err);
}
});
});
带有 HTML 的完整代码: https://gist.github.com/sancowinx/31b6289b7f28908db0c1
对于 JSON 数据,我使用来自 Ergast API 的 API 来获取 JSON 结果。
编辑:添加堆栈跟踪:
$.ajax.success 实际上是
myBarChart = new Chart(ctx).Bar(chartData);
有什么建议吗?提前致谢。
1个回答
您的堆栈跟踪告诉我
ctx
或
chartData
未定义。如果您已经检查过 chartData,我猜是
ctx
。(使用
console.log
验证这一点。)如果是这种情况,也许答案是这样的:
canvas.getContext("2d") 未定义
如果不是这种情况,那么 ChartJS 在您的 JSON 中寻找的元素未定义。如果是这种情况,您必须查看文档以查看缺少哪个元素。
brokethebuildagain
2014-09-29