SOF 및 Chart.js 입문. 이 라인 차트 코드로 작업하기 : [Link] [1] linegraph.js는 그 데이터를 가져 와서 차트에 데이터를 추가합니다.데이터베이스의 데이터가있는 Chart.js 동적 업데이트
나는 그래프에서 "이벤트"값을 동적으로 업데이트하기 위해 setInterval 함수를 설정해 보았습니다. 그래프가 렌더링되고 초기 이벤트 값이 추가됩니다. 그러나 이벤트 데이터를 업데이트하기 위해 setInterval을 실행하면 오류가 발생합니다. "잡히지 않은 TypeError : 속성 9 '(정의되지 않음)을 읽을 수 없음"(내 배열의 행 43 - 10 개 항목)
함수를 올바르게 사용하여 배열에서 모든 값을 가져온 다음 그래프를 업데이트하십시오. 도와주세요!
업데이트 코드 V2 :
$(document).ready(function(){
$.ajax({
url: "http://localhost/data.php",
method: "GET",
success: function(data) {
console.log(data);
var source = [];
var event = [];
for(var i in data) {
source.push("Source" + data[i].source);
event.push(data[i].events);
}
var chartdata = {
labels: source,
datasets : [
{
label: 'events',
backgroundColor: 'rgba(200, 200, 200, 0.75)',
borderColor: 'rgba(200, 200, 200, 0.75)',
hoverBackgroundColor: 'rgba(200, 200, 200, 1)',
hoverBorderColor: 'rgba(200, 200, 200, 1)',
data: event
}
]
};
var ctx = $("#mycanvas");
var barGraph = new Chart(ctx, {
type: 'bar',
data: chartdata
});
var updateChart = function() {
$.getJSON("data.php", function(data) {
barGraph.destroy(); <--------- Issue
for(var i in data) {
source.push("Source" + data[i].source);
event.push(data[i].events);
}
barGraph.update();
});
}
setInterval(function(){updateChart();},3000);
},
error: function(data) {
console.log(data);
}
});
});
새로운 코드 업데이트 4.17
<div id="chart-container" style="width:40%">
<canvas id="mycanvas"></canvas>
</div>
<script>
var randomScalingFactor = function() {
return Math.round(Math.random() * 100);
};
// create initial chart
var ctx_live = document.getElementById("mycanvas");
var myChart = new Chart(ctx_live, {
type: 'doughnut',
data: {
labels: ['BPM','REMAIN'],
datasets: [{
data: [80,20],
borderWidth: 1,
backgroundColor:['#FF6384','#ffffff'],
label: 'BPMs',
}]
},
options: {
responsive: true,
title: {
display: true,
text: "Chart.js - Dynamically Update Chart Via Ajax Requests",
},
legend: {
display: false
},
}
});
// logic to get new data
var getData = function() {
$.ajax({
url: 'http://localhost/data.php',
success: function(data) {
// process your data to pull out what you plan to use to update the chart
console.log(data);
var bpms = [];
var remain = [];
for(var i in data) {
bpms.push(data[i].bpm);
remain.push(data[i].left);
}
// 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("BPM");
// myChart.data.labels.push("REMAIN");
// myChart.data.datasets[0].data.push([bpms]);
//myChart.data.datasets[0].data.push([remain]);
myChart.data.datasets.forEach(function(dataset) {
dataset.data = dataset.data.map(function() {
return randomScalingFactor(); <-------------------------------------- Issue Here
});
});
myChart.update();
}
});
};
// get new data every 3 seconds
setInterval(getData, 3000);
</script>
요르단에 감사드립니다! 너는 남자 야! 그것이 내가 필요한 것입니다. 나는 그것이 늦은 밤이었다고 생각한다. 내 생각에, 나의 "result"객체는 "data"이어야한다. 마찬가지로, data.php의 끝에서 json_encode ($ data)를 출력합니다 .... 결과 형식은 [{ "source": "0.0.0.0", "events": "154424"}, { "source" : "0.0.0.0", "events": "73843"등 ...}] 내 배열에 이벤트와 소스가 모두 들어 있습니다. 레이블을 업데이트하기 위해 배열을 만드는 방법을 알려주십시오. – devsplunk
@devsplunk는 최신 코드로 답변을 업데이트 할 수 있습니까? – jordanwillis
코드가 업데이트되었습니다. 확실하지 않지만 새로운 배열을 선언해야합니까? – devsplunk