【问题标题】:Loading multiple variables using Highcharts and jquery with php使用 Highcharts 和 jquery 与 php 加载多个变量
【发布时间】:2014-06-04 15:49:10
【问题描述】:

大家好,这是我的第一篇文章,但我是 Stack Overflow 以前解决方案的狂热用户,如果我能找到答案,我不会发布它。

我正在使用以下使用高图表事件->加载功能根据需要更新 12 个数据点,在我的情况下是每分钟一次。我只是想知道我在这段代码中做错了什么。

graphpage.html:

<script src='scripts/jquery-latest.js'></script>
<script src='scripts/highcharts.js'></script>

<div class="col-sm-12 col-lg-12">
<div class="graph-unit">
  <dtitle>Other Information</dtitle>
  <hr>
  <div class="section-graph">
    <div id="active_power_container"></div>
  </div>
</div>
<script src="scripts/getgraphdata.php"></script>

getgraphdata.php:

<?
require_once 'datastuff.php';
header('Content-Type: text/javascript');
?>
var collector_id='<?=$db->currentUser?>';
var meter_id=3;
var samples=60;
var mod=2;
var chart;
    $(document).ready(function() {

    var options = {
            chart: {
                renderTo: 'active_power_container',
                defaultSeriesType: 'line',
            events: {
            load: function() {
                var date,
                series1 = this.series[0],
                series2 = this.series[1],
                series3 = this.series[2],
                series4 = this.series[3],
                series5 = this.series[4],
                series6 = this.series[5],
                series7 = this.series[6],
                series8 = this.series[7],
                series9 = this.series[8],
                series10 = this.series[9],
                series11 = this.series[10],
                series12 = this.series[11],
                $sQry = '/i/data/graph_widget_data.php?collector_id='+collector_id+'&limit=1';
                setInterval(function() {

                    $.get($sQry , null, function(tsv) {
                        tsv = tsv.split(/\n/g);
                        $.each(tsv, function(i, line) {
                            line = line.split(/\t/);
                            var date = line[0];
                            series1.addPoint([date, line[1]], true, true);
                            series2.addPoint([date, line[2]], true, true);
                            series3.addPoint([date, line[3]], true, true);
                            series4.addPoint([date, line[4]], true, true);
                            series5.addPoint([date, line[5]], true, true);
                            series6.addPoint([date, line[6]], true, true);
                            series7.addPoint([date, line[7]], true, true);
                            series8.addPoint([date, line[8]], true, true);
                            series9.addPoint([date, line[9]], true, true);
                            series10.addPoint([date, line[10]], true, true);
                            series11.addPoint([date, line[11]], true, true);
                            series12.addPoint([date, line[12]], true, true);
                        });

                    });




                }, 1000);
            }
        }
            },
            credits: {
                enabled: false
            },
            title: {
                text: 'Active Power chart (meter: '+meter_id+')',
                x: -20 //center
            },
            subtitle: {
                text: '',
                x: -20
            },
            xAxis: {
                type: 'datetime',
                dateTimeLabelFormats: {
                    hour: '%I %p',
                    minute: '%I:%M %p'
                }
            },
            yAxis: {
                title: {
                    text: 'Active Power (Watts) '
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: [<? $query = $db->DB("SELECT long_description,short_description FROM `desc_tbl` WHERE `id` = '{$db->getdata(3)}'");
    $num_rows = $query->num_rows;
    $i = 1;
    while($row = $query->fetch_assoc()){
        $title = $row['short_description'];
        if($title == ""){ $title = $row['long_description']; }
?>{
    name: '<?=$title?>'
}<? if($i < $num_rows){echo ","; $i++; }  }?>]
        }

        sQry= '/i/data/graph_widget_data.php?collector_id='+collector_id+'&meter_id='+parseInt(meter_id)+'&samples='+parseInt(samples)+'&mod='+parseInt(mod);


        jQuery.get(sQry , null, function(tsv) {
            var lines = [];
            traffic  = [];
            traffic1 = [];
            traffic2 = [];
            traffic3 = [];
            traffic4 = [];
            traffic5 = [];
            traffic6 = [];
            traffic7 = [];
            traffic8 = [];
            traffic9 = [];
            traffic10 = [];
            traffic11 = [];
            try {
                // split the data return into lines and parse them
                tsv = tsv.split(/\n/g);
                jQuery.each(tsv, function(i, line) {
                    line = line.split(/\t/);
                    //date = Date.parse(line[0] +' UTC');
                    date = line[0];
                    traffic.push([
                        parseInt(date),
                        parseFloat(line[1].replace(',', ''))
                    ]);
                    traffic1.push([
                        parseInt(date),
                        parseFloat(line[2].replace(',', ''))
                    ]);
                    traffic2.push([
                        parseInt(date),
                        parseFloat(line[3].replace(',', ''))
                    ]);
                    traffic3.push([
                        parseInt(date),
                        parseFloat(line[4].replace(',', ''))
                    ]);         
                    traffic4.push([
                        parseInt(date),
                        parseFloat(line[5].replace(',', ''))
                    ]); 
                    traffic5.push([
                        parseInt(date),
                        parseFloat(line[6].replace(',', ''))
                    ]);
                    traffic6.push([
                        parseInt(date),
                        parseFloat(line[7].replace(',', ''))
                    ]);
                    traffic7.push([
                        parseInt(date),
                        parseFloat(line[8].replace(',', ''))
                    ]);
                    traffic8.push([
                        parseInt(date),
                        parseFloat(line[9].replace(',', ''))
                    ]);
                    traffic9.push([
                        parseInt(date),
                        parseFloat(line[10].replace(',', ''))
                    ]);
                    traffic10.push([
                        parseInt(date),
                        parseFloat(line[11].replace(',', ''))
                    ]);     
                    traffic11.push([
                        parseInt(date),
                        parseFloat(line[12].replace(',', ''))
                    ]); 
                });
            } catch (e) {  }
            options.series[0].data = traffic;
            options.series[1].data = traffic1;
            options.series[2].data = traffic2;
            options.series[3].data = traffic3;
            options.series[4].data = traffic4;
            options.series[5].data = traffic5;
            options.series[6].data = traffic6;
            options.series[7].data = traffic7;
            options.series[8].data = traffic8;
            options.series[9].data = traffic9;
            options.series[10].data = traffic10;
            options.series[11].data = traffic11;

            chart = new Highcharts.Chart(options);
        });
    });

sQry 输出如下一行:

1401896202400 0 0 0 0 0 97 0 0 0 0 0 0

这很好,因为它正在获取最新的查询,但它对它没有任何作用。 当我删除事件->加载东西时它工作正常,我似乎无法确定我的错误。任何帮助将不胜感激:)

谢谢。

【问题讨论】:

    标签: javascript php jquery highcharts multiple-columns


    【解决方案1】:

    我建议您使用循环而不是 12 行并调用 addPoint。其次,在 addPoint 中,您应该使用单次重绘。换句话说,所有系列都应该有

    series1.addPoint([date, line[12]], false, true);
    

    但最后

    series12.addPoint([date, line[12]], true, true);
    

    然后你将避免多次重绘图表。

    参考您的数据,也许问题在于您使用的值是字符串,而不是浮点数。尝试使用类似的东西:

    series1.addPoint([parseFloat(date), parseFloat(line[12])], false, true);
    

    一般来说,在你的 php 中,我建议你返回 json (json_encode),并在 javascirpt 中使用 $.getJSON(),这样你就可以避免任何类型的问题。

    【讨论】:

    • 感谢您的回复,它已经成功了 :) 我还考虑了 $.getJSON() 并且完美运行:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多