#javascript #database #chart.js
Вопрос:
Я хотел бы сгенерировать несколько «линейных диаграмм» в виде файла изображения. Для этой цели запрашиваются данные из базы данных. Эти данные передаются в функцию формирования диаграммы отдельно для каждого линейного графика. При выводе «console.log» в начале функции правильно отображаются переданные данные. Если я запрошу тот же вывод данных в разделе «анимация: {Завершение: функция () {console.log () …}}», то я получаю только возвращенный набор данных, последний раз запрошенный из базы данных.
Кроме того, для файла изображения всегда выводится одна и та же строка (независимо от того, какие данные передаются функции).
var imgur = new Image(); var chart_cp=document.getElementById("chart"); var chart_ctxp=chart_cp.getContext("2d"); var width=400; var height=150; function create_trend_vsr(messstelle, date, ergeb, akl, wl, chart_cp, chart_ctxp, width, height){ var imagedataurltemp; //output given data console.log("Messstelle"); console.log(messstelle); //returns korrect data console.log("Datum"); console.log(date); //returns korrect data console.log("Ergebnis"); console.log(ergeb); //returns korrect data console.log("AKL"); console.log(akl); //returns korrect data console.log("WL"); console.log(wl); //returns korrect data //create line-chart var LineChart = new Chart(chart_cp, { type: 'line', data: { labels: date, datasets: [{ label: 'AKL', data: akl, borderColor: 'red', borderWidth: 3, lineTension: 0, pointRadius:0, fill: false },{ label: 'WL', data: wl, borderColor: 'blue', borderWidth: 3, lineTension: 0, pointRadius:0, fill: false },{ label: 'Analysis', data: ergeb, borderColor: 'green', borderWidth: 1, lineTension: 0, pointRadius:2, }] }, options: { animation: { onComplete: function() { chart_cp.width=width; //set width of the Canvas chart_cp.height=height; //set width of the Canvas imagedataurltemp= chart_cp.toDataURL("image/png"); imgur.src=LineChart.toBase64Image(); imageliste.push(imgur.src); console.log("Messstelle"); console.log(messstelle); //returns only the last given data console.log("Datum"); console.log(date); //returns only the last given data console.log("Ergebnis"); console.log(ergeb); //returns only the last given data console.log("AKL"); console.log(akl); //returns only the last given data console.log("WL"); console.log(wl); //returns only the last given data console.log(imageliste.length); //returns the correct amount of charts to be created console.log(imgur.src); //always the same output ---gt; "data:image/png;base64,iVBORw0K....." } } } }); }
В чем моя ошибка? тнх
Ответ №1:
Я решил эту проблему, создав отдельный объект canvas для каждой диаграммы.
Перед вызовом функции создания диаграммы создается новый объект canvas.
document.getElementById("chartcontent").innerHTML = "lt;canvas id='" messstelle "' height='150vw' width='400vw'gt;lt;/canvasgt;";
«chartcontent» в HTML:
lt;p id="chartcontent"gt;lt;/pgt;