Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HighCharts未添加系列数据点_Javascript_Php_Jquery_Ajax_Highcharts - Fatal编程技术网

Javascript HighCharts未添加系列数据点

Javascript HighCharts未添加系列数据点,javascript,php,jquery,ajax,highcharts,Javascript,Php,Jquery,Ajax,Highcharts,我在尝试根据highcharts的日期动态更改数据时遇到了一些大问题。为了更好地理解我的程序,它使用时间戳记录系统数据。我有一个日期和时间选择器来指定获取新数据的开始和结束日期/时间。这将通过JS和Ajax传递给PHP,并返回XML。Javascript然后将XML解析为图表的新数据 值得注意的是,我尝试过删除所有系列,甚至尝试过完全销毁图表,但由于某些原因,我无法让它将系列点添加回图表中。另一个注意事项是,我使用JS函数生成图表 以下是使用Ajax的JS: function LoadNewCP

我在尝试根据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数据解析为两个数组(timestamp和cpudata),然后将其发送给GenerateCPU。formatDate在另一个函数中定义。如果需要,我可以展示它,但我不认为它是相关的(更多信息见下文)。以下是GenerateCPU:

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()
功能动态更新
系列和
xAxis

编辑

那么您的代码将变成什么:

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);
        }
    });
}
生成的CPU函数变成:

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()

虽然我很感激您的努力,但不幸的是,无论我使用.update()还是重新生成图表,它都会产生完全相同的效果。@user2416047这样您就看不到图表上的任何点了吗?这就是你想要更新它的时候吗?甚至在第一次生成时?@user2416047查看我的编辑。我将数据格式更改为[{name:name,y:value},…]。再次感谢您的帮助。不幸的是,这次我从Highcharts中抛出了一个错误14。我无法理解为什么,因为上面代码中的一切似乎都正常。回到您的原始代码(使用.update()方法),我拍摄了一个小视频来精确显示我遇到的问题。最奇怪的是,它会改变日期范围,只是没有绘制数据。数据的格式与从页面加载和单击“加载数据”按钮时的格式完全相同。@user2416047我想我理解了这个问题。错误14是当您给出的是
字符串而不是
数字时。请参阅我的重新编辑;)(添加了
parseInt()
函数来解析
'cpu'
属性)尝试使用Date.UTC()并让我知道您的时间、cpuInfo变量的样子。感谢您的回复。我不认为是日期,因为当我修改数据时,日期会正确显示。请看视频。按下按钮时,日期将更新。至于变量,因为它们在一个数组中,所以我将把数组放在一个粘贴箱中。时间戳:-cpudata:。页面加载时的数据与我单击“加载数据”按钮时的数据没有区别。在您的数据中,时间是不正确的,因为应该是时间戳(时间单位为毫秒)。