Динамическое обновление данных графика Chart js
Вложений: 1
Есть HTTP сервер, который передает данные клиенту по GET запросу. Принятые данные обрабатываются и из них строится линейный график с двумя кривыми. Принимаю 512 16 битных чисел, разбиваю на 2 массива по 256 чисел и хочу построить из этого график. Обновление данных идет раз в секунду (заведено на таймер).
Но не получается добиться чтобы график обновлялся. В чем может быть проблема? Вот часть кода
var xhr;
var myChart;
var idTimer2;
function onload(){
xhr = new(XMLHttpRequest);
var ctx = document.getElementById("myChart");
var data16Array = new Uint16Array(512);
var data16Array1 = new Uint16Array(256);
var data16Array2 = new Uint16Array(256);
myChart = new Chart(ctx, {
type: 'line',
data: {
labels: ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""],
datasets: [
{
label: 'Side1',
data: data16Array1,
backgroundColor: 'rgba(150, 150, 0, 0.0)',
borderColor: 'rgba(51, 255, 85, 1)',
borderWidth: 2,
pointStyle: 'line',
pointRadius: 0
},
{
label: 'Side2',
data: data16Array2,
backgroundColor: 'rgba(150, 150, 0, 0.0)',
borderColor: 'rgba(0, 119, 179, 1)',
borderWidth: 2,
pointStyle: 'line',
pointRadius: 0
}
]
},
options: {
tooltips: {
enabled: false
},
animation: {
duration: 0
},
responsive: true,
scales: {
xAxes: {
min: 0,
max: 512,
stacked: true,
ticks:{
stepSize : 64
}
},
yAxes: {
min: 0,
max: 4096,
stacked: true,
ticks:{
stepSize : 256
}
}
}
}
});
}
function Timer2(){
xhr.open("GET", "content.bin?r=" + Math.random(), true);
xhr.responseType = "arraybuffer";
xhr.onload = function (oEvent) {
var uint16Array = new Uint16Array(this.response);
for(var i = 0; i < 256; i++)
{
data16Array1[i] = uint16Array[i];
data16Array2[i+256] = uint16Array[i+256];
}
myChart.data.datasets[0].data = data16Array1;
myChart.data.datasets[1].data = data16Array2;
myChart.update();
}
xhr.send(null);
idTimer2 = setTimeout(Timer2, 1000);
}
function startchart(){
document.getElementById('butchart').innerHTML = ' <input class = "butcolor" type="button" style="color: #ffffff; background-color: #000000;" onclick="stopchart()" value="Stop Chart"/>';
Timer2();
}
|
Строка 91 странная
data16Array2[i+256] = uint16Array[i+256]; Зачем +256 ,если там всего 256? |
voraa,
Вы правы, невнимательность, исправил, но проблема сохраняется |
Ну значит надо просто отлаживать.
Либо ставить console.log или ставить точки останова в отладчике и смотреть, срабатывает ли onload, что приходит с сервера, срабатывает ли .update(), нет ли ошибок в консоле ... |
Да вроде решил вопрос, тут другой момент теперь вылез, почему вторые данные растянуты по графику в два раза больше чем первые? Т.е. выводжу две кривые одного и того же массива, но вторая кривая почему-то растяживается до 8192 значений, котя данные там максимум могут быть 4096
|
Вложений: 1
Вот скрин
function Timer2(){
xhr.open("GET", "content.bin?r=" + Math.random(), true);
xhr.responseType = "arraybuffer";
xhr.onload = function (oEvent) {
var uint16Array = new Uint16Array(this.response);
var uint16Array1 = new Uint16Array(256);
var uint16Array2 = new Uint16Array(256);
for(var i = 0; i < 256; i++)
{
uint16Array1[i] = uint16Array[i];
//uint16Array2[i] = uint16Array[i+256];
uint16Array2[i] = uint16Array[i];
}
myChart.data.datasets[0].data = uint16Array1;
myChart.data.datasets[1].data = uint16Array2;
myChart.update();
//console.log("Chart update");
//myChart.data.datasets[0].data = uint16Array;
//myChart.data.datasets[1].data = uint16Array;
//myChart.update();
}
xhr.send(null);
idTimer2 = setTimeout(Timer2, 1000);
}
|
| Часовой пояс GMT +3, время: 13:30. |