我对chartjs非常陌生,并使用laravel完成当前项目。现在,我需要创建一个图表,需要自动更新而不刷新,数据来自mysql数据库。我在网上发现了这种代码:this question。我试过这个代码,输出总是让我失望。
// used for example purposes
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// create initial empty chart
var ctx_live = document.getElementById("mycanvas");
var myChart = new Chart(ctx_live, {
type: 'line',
data: {
labels: readingID,
datasets: [{
data: moist,
borderWidth: 1,
borderColor:'#00c0ef',
label: 'liveCount',
}]
},
options: {
responsive: true,
title: {
display: true,
text: "Chart.js - Dynamically Update Chart Via Ajax Requests",
},
legend: {
display: false
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
}
}]
}
}
});
// this post id drives the example data
var readingID = [];
var moist = [];
// logic to get new data
var getData = function() {
$.ajax({
url: "/soildata",
type:"GET",
success: function(data) {
console.log(data);
data = JSON.parse(data);
// process your data to pull out what you plan to use to update the chart
// e.g. new label and a new data point
// add new label and data point to chart's underlying data structures
myChart.data.labels.push("ReadingID " + readingID++);
myChart.data.datasets[0].data.push(getRandomIntInclusive(1, 25)); <<<<<-----------I DONT KNOW HOW TO PLAY ON THIS PART I GUESS THIS PART CAN MAKE MY DATABASE WORKING
// re-render the chart
myChart.update();
}
});
};
// get new data every 3 seconds
setInterval(getData, 3000);
我想我需要在这个函数上做一些事情,这样我来自数据库的数据才能正常工作: Chart.data.datasets [0] .data.push(getRandomIntInclusive(1,25));
任何人?..有没有人知道这个?..我是chartjs的新手,我真的花了数周的时间来解决,但我想我不能。我希望那里有人可以提供帮助,即使是不同的代码也会解决我的问题是高度接受的。感谢您采取的任何行动......
答案 0 :(得分:0)
假设您从该ajax调用中获得的数据是好的,那么只需更换
即可 myChart.data.datasets[0].data.push(getRandomIntInclusive(1, 25));
与
myChart.data.datasets[0].data.push(data);
当然,这取决于该数据返回给您时的格式。
我建议一旦从ajax返回数据,就将console.log-ing这些数据,以确保它的格式适合chartjs
答案 1 :(得分:0)
比方说,moist = [50, 30]
和 JSON 响应的内容如下:
data{"id":"1" , "val":"20"}
要将 moist
从 [50,30]
更新为 [1, 20]
:
myChart.data.datasets[0].data[0] = data.id;
myChart.data.datasets[1].data[1] = data.val;
myChart.update();