SOFとChart.jsの新機能です。この線グラフコードを使って作業する:[Link] [1] linegraph.jsはそのデータをプルして、そのデータをグラフに追加します。データベースからのデータを含むChart.js動的更新
グラフの「イベント」値を動的に更新するsetInterval関数を設定しようとしました。グラフがレンダリングされ、初期イベント値が追加されます。しかし、イベントデータを更新するためにsetIntervalを実行するとエラーが発生します。 "Uncaught 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>
ありがとうジョーダン!あなたは男です!それが私の必要なものです。私はそれが深夜だったと思います...私の "結果"オブジェクトは "データ"でなければならないと思います。同様に、data.phpの最後にjson_encode($ data)という文字が表示されます。結果の形式は[{"source": "0.0.0.0"、 "events": "154424"}、{"source" : "0.0.0.0"、 "events": "73843"など...}]私の配列はイベントとソースの両方を持っています。ラベルを更新するためにアレイを構築する方法を教えてください。 – devsplunk
@devsplunk最新のコードで回答を更新できますか? – jordanwillis
コードは上記で更新されました。わからないけど、まだ新しい配列を宣言する必要はありますか? – devsplunk