javascript — Chart.JS TypeError: this.scale не определено

Я просто пытаюсь построить некоторые основные точки X и Y на линейном графике, полученном из некоторого PHP.

В форме отправки я делаю пост Ajax, чтобы получить баллы за график. Затем запустите функцию JS, которая должна создать график. Я продолжаю получать «this.scale не определено», и график ничего не показывает / вылетает.

HTML
<canvas id="cv" height="50"></canvas>

РЕДАКТИРОВАТЬ:

Это JSON, который устанавливается в PHP и отправляется обратно с поста.
$ Даты — это только те даты, что указаны ниже, а $ num_added — это нижние точки данных.

    $ds['labels'] = $dates;
$ds['datasets'][]=array('label' => $tid,'fillColor' => 'rgba(220,220,220,0.2)','strokeColor' =>'rgba(220,220,220,1)','pointColor' => 'rgba(220,220,220,1)','pointStrokeColor' => '#fff','pointHighlightFill' => '#fff','pointHighlightStroke' => 'rgba(220,220,220,1)','data' => $num_added);
print json_encode($ds);

Пост Ajax, который возвращает объект JSON

{
"labels":[ "2016-01-10","2016-01-12","2016-01-13","2016-01-14","2016-01-15","2016-01-16","2016-01-17","2016-01-18","2016-01-19","2016-01-21","2016-01-22","2016-01-24","2016-01-26","2016-01-27","2016-01-29","2016-01-30","2016-01-31","2016-02-01","2016-02-02","2016-02-03","2016-02-04","2016-02-05","2016-02-06","2016-02-07","2016-02-08","2016-02-10"],
"datasets":[
{
"label":"XYZ",
"fillColor":"rgba(220,220,220,0.2)",
"strokeColor":"rgba(220,220,220,1)",
"pointColor":"rgba(220,220,220,1)",
"pointStrokeColor":"#fff",
"pointHighlightFill":"#fff",
"pointHighlightStroke":"rgba(220,220,220,1)",
"data":["1483","2044","834","818","1215","1534","823","1368","3048","4808","4486","6488","1340","4260","1863","5309","1259","858","4041","7444","4514","3994","3574","1419","1383","1825"]
}
]}

Это тот же формат, что и в примере, который я вам даю, поэтому я не могу понять это.

Как только я получил точки, я отправил их в свою функцию js line_graph («cv», data) для построения графика линии, но именно здесь она падает. Что не имеет смысла для меня, потому что я понял это правильно из документации.

function line_graph(holder, data){

Chart.defaults.global.animation = true;
Chart.defaults.global.animationSteps = 60;
Chart.defaults.global.animationEasing = "easeOutQuart";
Chart.defaults.global.showScale = true;
Chart.defaults.global.scaleOverride = false;
Chart.defaults.global.scaleLineColor ="rgba(0,0,0,.1)";
Chart.defaults.global.scaleLineWidth = 1;
Chart.defaults.global.scaleShowLabels = true;
Chart.defaults.global.scaleLabel = "<%=value%>";
Chart.defaults.global.scaleIntegersOnly = true;
Chart.defaults.global.scaleBeginAtZero = false;
Chart.defaults.global.scaleFontFamily = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif";
Chart.defaults.global.scaleFontSize = 12;
Chart.defaults.global.scaleFontStyle = "normal";
Chart.defaults.global.scaleFontColor = "#666";
Chart.defaults.global.responsive = true;
Chart.defaults.global.maintainAspectRatio = true;
Chart.defaults.global.showTooltips = true;
Chart.defaults.global.tooltipEvents = ["mousemove", "touchstart", "touchmove"];
Chart.defaults.global.tooltipFillColor = "rgba(0,0,0,0.8)";
Chart.defaults.global.tooltipFontFamily = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif";
Chart.defaults.global.tooltipFontSize = 14;
Chart.defaults.global.tooltipFontStyle = "normal";
Chart.defaults.global.tooltipFontColor = "#fff";
Chart.defaults.global.tooltipTitleFontFamily = "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif";
Chart.defaults.global.tooltipTitleFontSize = 14;
Chart.defaults.global.tooltipTitleFontStyle = "bold";
Chart.defaults.global.tooltipTitleFontColor = "#fff";
Chart.defaults.global.tooltipYPadding = 6;
Chart.defaults.global.tooltipXPadding = 6;
Chart.defaults.global.tooltipCaretSize = 8;
Chart.defaults.global.tooltipCornerRadius = 6;
Chart.defaults.global.tooltipXOffset = 10;
Chart.defaults.global.tooltipTemplate = "<%if (label){%><%=label%>: <%}%><%= value %>";
Chart.defaults.global.multiTooltipTemplate = "<%= value %>";

var ctx = document.getElementById(holder).getContext("2d");
var myLineChart = new Chart(ctx).Line(data, {
scaleShowGridLines : true,
scaleGridLineColor : "rgba(0,0,0,.05)",
scaleGridLineWidth : 1,
scaleShowHorizontalLines: true,
scaleShowVerticalLines: true,
bezierCurve : true,
bezierCurveTension : 0.4,
pointDot : true,
pointDotRadius : 4,
pointDotStrokeWidth : 1,
pointHitDetectionRadius : 20,
datasetStroke : true,
datasetStrokeWidth : 2,
datasetFill : true,
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].strokeColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"});

}

График работает, если я просто кодирую данные в функцию, но, очевидно, это бесполезно. Я буквально перепробовал все, что мог придумать, поэтому думаю, что кто-то столкнулся с этой проблемой. Это простой AJAX, чтобы получить данные, а затем отобразить точки, что раздражает, потому что это простой процесс. Я знаю, что мне чего-то не хватает, это мой первый раз с chart.js

1

Решение

Я понял это примерно через 2 дня. Это довольно раздражает, но я думаю, что он смотрел на JSON как на массив, а не на тот объект, который ему нужен. поэтому я выполнил parseJson для возвращаемых данных, и они отлично сработали в графике … В любом случае, спасибо за вашу помощь, вы сказали мне, что оповещение @potatopeelings помогло мне понять, что JSON не читается должным образом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector