highcharts使用ajax计量实时数据

时间:2012-12-01 11:56:21

标签: highcharts

我在我的项目中使用了highcharts库,我必须每1秒更新一次Gauge,并使用PHP文件创建数据。

highcharts Gauge Example有一些代码让它每1秒触发一次,但是我找不到像This Link这样的东西来用Ajax Technic从PHP文件中获取数据。

任何人都有任何想法实现这种情况并将Ajax应用于此图表?

1 个答案:

答案 0 :(得分:1)

您没有找到示例,因为它是通用的,请参阅如何使用$.post()完成:

http://jsfiddle.net/oceog/zpwdp/

$(function () {

    var chart = new Highcharts.Chart({

        chart: {
            renderTo: 'container',
            type: 'gauge',
            plotBackgroundColor: null,
            plotBackgroundImage: null,
            plotBorderWidth: 0,
            plotShadow: false
        },

        title: {
            text: 'Speedometer'
        },

        pane: {
            startAngle: -150,
            endAngle: 150,
            background: [{
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#FFF'],
                        [1, '#333']
                    ]
                },
                borderWidth: 0,
                outerRadius: '109%'
            }, {
                backgroundColor: {
                    linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
                    stops: [
                        [0, '#333'],
                        [1, '#FFF']
                    ]
                },
                borderWidth: 1,
                outerRadius: '107%'
            }, {
                // default background
            }, {
                backgroundColor: '#DDD',
                borderWidth: 0,
                outerRadius: '105%',
                innerRadius: '103%'
            }]
        },

        // the value axis
        yAxis: {
            min: 0,
            max: 200,

            minorTickInterval: 'auto',
            minorTickWidth: 1,
            minorTickLength: 10,
            minorTickPosition: 'inside',
            minorTickColor: '#666',

            tickPixelInterval: 30,
            tickWidth: 2,
            tickPosition: 'inside',
            tickLength: 10,
            tickColor: '#666',
            labels: {
                step: 2,
                rotation: 'auto'
            },
            title: {
                text: 'km/h'
            },
            plotBands: [{
                from: 0,
                to: 120,
                color: '#55BF3B' // green
            }, {
                from: 120,
                to: 160,
                color: '#DDDF0D' // yellow
            }, {
                from: 160,
                to: 200,
                color: '#DF5353' // red
            }]        
        },

        series: [{
            name: 'Speed',
            data: [80],
            tooltip: {
                valueSuffix: ' km/h'
            }
        }]

    }, 
    // Add some life
    function (chart) {
        setInterval(function () {
            $.post('/echo/json/',{
                   json: JSON.stringify({
                   //This is just a sample data, see comments after code to real world usage
                   inc: Math.round((Math.random() - 0.5) * 20)
                   })},
            function(data) {
            var point = chart.series[0].points[0],
                newVal,
                inc = data.inc;

            newVal = point.y + inc;
            if (newVal < 0 || newVal > 200) {
                newVal = point.y - inc;
            }

            point.update(newVal);
        },"json");
        }, 3000);
      });
    });​

在现实世界中,您使用类似

的内容
$.post('new_data.php',{last_time: last_time},function(data) { 
   //set point here

},"json")

在new_data.php中你做了类似

的事情
$data=get_data($last_time);
echo json_encode($data);
exit;