Я пытаюсь динамически обновить график Chart.js данными, поступающими с веб-сервера по запросу fetch()
, например,
res.send({myData: data});
Проблема: res.send()
удаляет шаблон мопса в браузере. Каков наилучший способ заполнить диаграмму ответом fetch()
при отображении шаблона на экране?
index.js - NODE API
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.post('/', function(req, res, next) {
if(req.body.name) {
console.log(req.body.name);
data = [100, 200, 150, 100];
} else {
data = [0, 0, 0, 0];
}
res.send({myData: data});
// res.render('index', { graph_data: data });
});
module.exports = router;
myscript.js - клиентский скрипт с ajax-запросом
// make an ajax fetch request to the server for graph data and populate it.
document.getElementById("form").addEventListener("submit", function(event) {
// get for inputs to send to server
let name = document.getElementById("form-name").value;
console.log("fetch...");
// event.defaultPrevented();
// give endpoint, and create a request to send
fetch("/", {
method: 'POST',
headers: new Headers(),
body: JSON.stringify({ name: name})
}).then(function(response) {
console.log("response returned..")
return response.json();
}).then(function(myJson) {
console.log("populated data.")
populateGraph(myJson);
});
});
console.log("populated data.")
var ctx = document.getElementById("myChart");
function populateGraph(myJson) {
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [0, 0, 0],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
responsive:true,
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
myChart.data.datasets[0].data.push(myJson.myData);
myChart.update();
}
Есть идеи, как сделать эту работу?