javascript - HighCharts 不添加系列数据点

标签 javascript php jquery ajax highcharts

我在尝试根据 Highcharts 的日期动态更改数据时遇到了一些大麻烦。为了更好地理解我的程序,它使用时间戳记录系统数据。我有一个日期和时间选择器来指定获取新数据的开始和结束日期/时间。该信息通过 JS 和 Ajax 传递给 PHP 并发送回 XML。然后,Javascript 将 XML 解析为图表的新数据。

作为说明,我尝试删除所有系列,甚至尝试完全销毁图表,但由于某种原因,我无法将系列点添加回图表中。另外需要注意的是,我使用 JS 函数来生成图表。

这是使用Ajax的JS:

function LoadNewCPUData(fromdate, todate, serverid) {
    var chart = $('#cpuContainer').highcharts().series[0].remove();
    $.ajax({
        type : "GET",
        url : "js/ajax.php?page=cpudata&fromdate=" + encodeURIComponent(fromdate) + "&todate=" + encodeURIComponent(todate) + "&serverid=" + serverid,
        dataType : "xml",
        success : function(xml) {
            var cpudata = [];
            var timestamps = [];
            $(xml).find('cpudata').each(function() {
                cpudata.push($(this).attr('cpu'));
                var t = $(this).attr('timestamp').split(/[- :]/);
                var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
                timestamps.push(formatDate(d));
            });
            GenerateCPU(timestamps, cpudata);
        }
    });
}

正如您所看到的,该函数将 xml 数据解析为两个数组(时间戳和 cpudata),然后将其发送到GenerateCPU。 formatDate 在另一个函数中定义。如果需要,我可以展示它,但我不认为它是相关的(更多内容见下文)。这是生成CPU:

function GenerateCPU(times, cpuInfo) {
        $('#cpuContainer').highcharts({
            chart : {
                type : 'line'
        },
        credits : {
            enabled : false
        },
        title : {
            text : 'CPU Usage'
        },
        tooltip : {
            valueSuffix : '%'
        },
        xAxis : {
            categories : times
        },
        yAxis : {
            title : {
                text : 'CPU Usage',
            },
            tickInterval : 1,
            min : 0,
            max : 100
        },
        series : [{
            name : 'CPU Usage',
            data : cpuInfo
        }]
    });
}

整个事情的奇怪部分是图表显示了 xAxis 的正确数据(在GenerateCPU 的参数中定义)。但是,无论我做什么,我都无法让它显示系列数据。我也尝试过 Chart.addSeries 但这也不起作用。 cpudata 数组在发送到GenerateCPU 之前和在GenerateCPU 中都有数据。为了展示这一点,下面是一个 XML 示例:

<cpuinfo>
    <cpudata timestamp="2015-08-06 20:20:31" cpu="15"/>
</cpuinfo>

我希望这不会太长,有人可以读一下。有人知道我做错了什么吗?

谢谢!

最佳答案

如果第一个图表显示正确,在尝试更新数据之前,问题可能来自于图表的重新定义。我建议您使用 Highcharts 的 update() 函数来动态更新 seriesxAxis

编辑

那么你的代码会变成:

function LoadNewCPUData(fromdate, todate, serverid) {
    $.ajax({
        type : "GET",
        url : "js/ajax.php?page=cpudata&fromdate=" + encodeURIComponent(fromdate) + "&todate=" + encodeURIComponent(todate) + "&serverid=" + serverid,
        dataType : "xml",
        success : function(xml) {
            var cpudata = [];
            $(xml).find('cpudata').each(function() {
                var t = $(this).attr('timestamp').split(/[- :]/);
                var d = new Date(t[0], t[1]-1, t[2], t[3], t[4], t[5]);
                cpudata.push({name: formatDate(d), y: parseInt($(this).attr('cpu'))});
            });
            GenerateCPU(cpudata);
        }
    });
}

你的GenerateCPU函数变成:

function GenerateCPU(cpuInfo) {
        $('#cpuContainer').highcharts({
            chart : {
                type : 'line'
        },
        credits : {
            enabled : false
        },
        title : {
            text : 'CPU Usage'
        },
        tooltip : {
            valueSuffix : '%'
        },
        xAxis : {
            type: 'category'
        },
        yAxis : {
            title : {
                text : 'CPU Usage',
            },
            tickInterval : 1,
            min : 0,
            max : 100
        },
        series : [{
            name : 'CPU Usage',
            data : cpuInfo
        }]
    });
}

这会给你带来不同的结果吗?

重新编辑

抛出错误 14 是因为您传递了字符串而不是数字。使用上面的函数 parseInt() 来避免它。 (如果有小数,则使用 parseFloat())

关于javascript - HighCharts 不添加系列数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31868665/

相关文章:

javascript - 获取 TypeError : $. ajax(...).done 不是函数 [Ajax, Jquery]

javascript - 打印 JavaScript 响应

php - 无需插入即可获取下一个 auto_increment 值

php - 是否有用于 php 的高级开源 pop3 类?

jquery - 如何使我的移动汉堡菜单居中并防止我的菜单在单击菜单项时消失?

javascript - 为 jQuery UI draggable() 设置超时以防止锁定效果

javascript - 如何从下面的代码中无限翻转?

JavaScript 错误 "Cannot read property"

php - 排除php数组中的最后一个逗号

jquery - 更改了 HTML,现在在each() 中无法访问子输入