Диаграмма JS "Невозможно получить свойство 'getTime' с неопределенной или нулевой ссылкой" - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь передать значения диаграммы из сервлета java на веб-страницу. На диаграмме даты должны отображаться как x, а целые числа как y.

Сервлет отправляет массив объектов, которые содержат год, месяц, день и значение.

Функция:

function getMultiChart() {
    jQuery.ajax({
        type: "POST",
        data: {formType: 'getProjection'},
        url: "ChartServlet",
        dataType: 'json',
        asynch: false,
        success: function (data) {
            var obj = JSON.stringify(data);
            var obj2 = JSON.parse(obj);
            var tmpArr = new Array();
            jQuery.each(obj2, function (prop, val){
                tmpArr.push("x: new Date(" + Number(val.year) + "," + Number(val.month) + "," + Number(val.day) + "), y: " + Number(val.value));
            });
            var chart = new CanvasJS.Chart("chartContainer",{
                    title: {
                        text: "Manpower"
                    },
                    data: [
                        {
                            type: "column",
                            indexLabel: "{y}",
                            indexLabelPlacement: "outside",
                            indexLabelOrientation: "horizontal",
                            showInLegend: true,
                            name: "Overtime Personnel",
                            dataPoints: tmpArr
                        }
                    ]
                });
            chart.render();
       },
        error: function () {
            console.log(data);
        }
    });
}

Когда я запускаю его, я получаю вышеупомянутую ошибку в диаграмме JS. js.

Это работает нормально, если я заменяю данные json жестко закодированными значениями, такими как:

var tmpArr = [
    {x: new Date(2020, 01, 1), y: 18},
    {x: new Date(2020, 01, 2), y: 0},
    {x: new Date(2020, 01, 3), y: 0},
    {x: new Date(2020, 01, 4), y: 0},
    {x: new Date(2020, 01, 5), y: 0},
    {x: new Date(2020, 01, 6), y: 0},
    {x: new Date(2020, 01, 7), y: 0},
    {x: new Date(2020, 01, 8), y: 0},
    {x: new Date(2020, 01, 9), y: 0},
    {x: new Date(2020, 01, 10), y: 0},
    {x: new Date(2020, 01, 11), y: 0},
    {x: new Date(2020, 01, 12), y: 0}
]

Где я тут балуюсь?

1 Ответ

0 голосов
/ 13 марта 2020

Моя ошибка в том, что массив данных должен быть массивом объектов, а не строкой.

Даже при этом я все еще не мог получить "x: new Date (...)" часть к работе.

Рабочий код:

var tmpArr = new Array();
jQuery.each(obj2, function (prop, val) {
    var t = {y: val.value, label: val.month + "/" + val.day + "/" + val.year};
    tmpArr.push(t);
});
...