【问题标题】:Highcharts gauge is render before the data is fetched by json在 json 获取数据之前渲染 Highcharts 仪表
【发布时间】:2015-01-26 02:10:27
【问题描述】:

我遇到了一个奇怪的问题。我有一个web page 和 2 个 highcharts 仪表模块,我正在使用 json 从 php 脚本中检索数据。 json 看起来像 [{"PID":"1019","Date":"15-10-2014","Time":"02:52:36","Temperature":"31","Humidity":"65"}]

1) 问题是,在重试数据的第一次迭代期间,它没有反映在模块中。 [IMAGE]
2)在数据的第二次迭代期间,数据由模块显示,但没有颜色突出显示并且
3) 在第三次迭代以后,模块以颜色突出显示数据。

我认为问题在于 json 的异步行为。但我不确定,我是网络编程的新手。 我的 javascript 如下

var point, temperature, humidity, pressure, windspeed, winddirection, light, rainfall, elevation, lat, lang, bvolt, bcurrent, svolt, scurrent, temp;
$.getJSON("http://openweather.in/localpublish/livedata.php", function(data) {
            console.log(data);
            temperature = parseFloat(data[0].Temperature);
            humidity = parseFloat(data[0].Humidity);
            pressure = parseFloat(data[0].Pressure);
            windspeed = parseFloat(data[0].Windspeed);
            winddirection = parseFloat(data[0].Winddirection);
            light = parseFloat(data[0].Light);
            rainfall = parseFloat(data[0].Rainfall);
            elevation = parseFloat(data[0].Elevation);
            lat = parseFloat(data[0].Lat);
            lang = parseFloat(data[0].Lang);
            bvolt = parseFloat(data[0].Bvolt);
            bcurrent = parseFloat(data[0].Bcurrent);
            svolt = parseFloat(data[0].Svolt);
            scurrent = parseFloat(data[0].Scurrent);
        });

 $(document).ready(function () {

    var gaugeOptions = {

        chart: {
            type: 'solidgauge'
        },

        title: null,

        pane: {
            center: ['50%', '75%'],
            size: '120%',
            startAngle: -90,
            endAngle: 90,
            background: {
                backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                innerRadius: '60%',
                outerRadius: '100%',
                shape: 'arc'
            }
        },

        tooltip: {
            enabled: false
        },

        // the value axis
        yAxis: {
            lineWidth: 0,
            minorTickInterval: null,
            tickPixelInterval: 400,
            tickWidth: 0,
            title: {
                y: -70
            },
            labels: {
                y: 16
            }        
        },

        plotOptions: {
            solidgauge: {
                dataLabels: {
                    y: -30,
                    borderWidth: 0,
                    useHTML: true
                }
            }
        }
    };

    // The Temperature gauge
    $('#container-temperature').highcharts(Highcharts.merge(gaugeOptions, {
        yAxis: {
                stops: [
            [1, '#55BF3B'], // green
                [0.5, '#DDDF0D'], // yellow
                [0.75, '#DF5353'] // red
            ],
            min: 0,
            max: 50     
        },

        credits: {
            enabled: false
        },

        series: [{
            name: 'Temperature',
            data: [parseFloat(temperature)],
            dataLabels: {
                format: '<div style="text-align:center"><span style="font-size:20px;color:' + 
                    ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span><br/>' + 
                    '<span style="font-size:12px;color:silver">°C</span></div>'
            },
            tooltip: {
                valueSuffix: '°C'
            }
        }]

    }));

    // The Humidity gauge
    $('#container-humidity').highcharts(Highcharts.merge(gaugeOptions, {
        yAxis: {
                stops: [
            [1, '#55BF3B'], // green
                [0.55, '#DDDF0D'], // yellow
                [0.8, '#DF5353'] // red
            ],
            min: 0,
            max: 100
            },

        credits: {
            enabled: false
        },

        series: [{
            name: 'Humidity',
            data: [parseFloat(humidity)],
            dataLabels: {
                format: '<div style="text-align:center"><span style="font-size:20px;color:' + 
                    ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y:.1f}</span><br/>' + 
                    '<span style="font-size:12px;color:silver">%rh</span></div>'
            },
            tooltip: {
                valueSuffix: '%rh'
            }      
        }]
    }));

    // The atmospheric pressure gauge
    $('#container-pressure').highcharts(Highcharts.merge(gaugeOptions, {
        yAxis: {
                stops: [
            [1, '#55BF3B'], // green
                [0.55, '#DF5353'] // red
            ],
            min: 0,
            max: 20
            },

        credits: {
            enabled: false
        },

        series: [{
            name: 'Atmospheric Pressure',
            data: [parseFloat(pressure)],
            dataLabels: {
                format: '<div style="text-align:center"><span style="font-size:20px;color:' + 
                    ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y:.1f}</span><br/>' + 
                    '<span style="font-size:12px;color:silver">* 100 hbar</span></div>'
            },
            tooltip: {
                valueSuffix: 'hpa'
            }      
        }]
    }));
        setInterval(function () {

    $.getJSON("http://openweather.in/localpublish/livedata.php", function(data) {
            console.log(data);
            temperature = data[0].Temperature;
            humidity = data[0].Humidity;
            pressure = data[0].Pressure;
            windspeed = data[0].Windspeed;
            winddirection = data[0].Winddirection;
            light = data[0].Light;
            rainfall = data[0].Rainfall;
            elevation = data[0].Elevation;
            lat = data[0].Lat;
            lang = data[0].Lang;
            bvolt = data[0].Bvolt;
            bcurrent = data[0].Bcurrent;
            svolt = data[0].Svolt;
            scurrent = data[0].Scurrent;
        });

    point = $('#container-temperature').highcharts().series[0].points[0];    
    point.update(parseFloat(temperature));

    point = $('#container-humidity').highcharts().series[0].points[0];       
    point.update(parseFloat(humidity));

    point = $('#container-pressure').highcharts().series[0].points[0];       
    point.update(parseFloat(pressure));
/*  
    point = $('#container-windspeed').highcharts().series[0].points[0];       
    point.update(windspeed);

    point = $('#container-winddirection').highcharts().series[0].points[0];       
    point.update(winddirection);

    point = $('#container-light').highcharts().series[0].points[0];       
    point.update(light);

    point = $('#container-rainfall').highcharts().series[0].points[0];       
    point.update(rainfall);

    point = $('#container-elevation').highcharts().series[0].points[0];       
    point.update(elevation);

    point = $('#').highcharts().series[0].points[0];       
    point.update(humidity);

    temp = bvolt + ' V';
    $('#disp-batteryV').val(temp);

    temp = bcurrent + ' mA';
    $('#disp-batteryC').val(temp);

    temp = svolt + ' V';
    $('#disp-solarV').val(temp);

    temp = scurrent + ' mA';
    $('#disp-solarC').val(temp);
*/    
}, 1*60*1000);  
});

【问题讨论】:

  • 你的图表应该在 $.getJSON() 回调中初始化,因为图表之前已经初始化,获取整个数据。
  • 有两个 $.getJSON() 函数,一个在开头,第二个在 setInterval 函数中。如果您查看图像,很明显 json 在图表呈现之前响应,并且这种情况仅在某些时候发生。
  • 你可以看看link。我已将 json 响应记录到控制台。
  • 使用 getjson 然后在回调中加载新的,最后运行图表。 ajax 调用的 Setinerval 不正确。

标签: javascript jquery json highcharts getjson


【解决方案1】:

试试这个

var 点、温度、湿度、压力、风速、风向、光、降雨量、海拔、纬度、郎、伏特、电流、伏特、电流、温度; $.getJSON("http://openweather.in/localpublish/livedata.php", function(data) { 控制台.log(数据); 温度 = parseFloat(数据[0].Temperature); 湿度 = parseFloat(数据[0].湿度); 压力 = parseFloat(数据[0].压力); windspeed = parseFloat(data[0].Windspeed); winddirection = parseFloat(data[0].Winddirection); light = parseFloat(数据[0].Light); 降雨量 = parseFloat(数据[0].Rainfall); 海拔= parseFloat(数据[0].海拔); lat = parseFloat(data[0].Lat); lang = parseFloat(data[0].Lang); bvolt = parseFloat(数据[0].Bvolt); bcurrent = parseFloat(data[0].Bcurrent); svolt = parseFloat(数据[0].Svolt); scurrent = parseFloat(data[0].Scurrent); var gaugeOptions = { 图表: { 类型:'solidgauge' }, 标题:空, 窗格:{ 中心:['50%', '75%'], 大小:'120%', 起始角度:-90, 结束角度:90, 背景: { 背景颜色:(Highcharts.theme && Highcharts.theme.background2)|| '#EEE', 内半径:'60%', 外半径:'100%', 形状:'弧' } }, 工具提示:{ 启用:假 }, // 值轴 y轴:{ 线宽:0, 次要TickInterval:空, 滴答像素间隔:400, 刻度宽度:0, 标题: { 是:-70 }, 标签: { 是:16 } }, 绘图选项:{ 固体测量仪:{ 数据标签:{ y:-30, 边框宽度:0, 使用HTML:真 } } } }; //温度计 $('#container-temperature').highcharts(Highcharts.merge(gaugeOptions, { y轴:{ 停止:[ [1, '#55BF3B'], // 绿色 [0.5, '#DDDF0D'], // 黄色 [0.75, '#DF5353'] // 红色 ], 分钟:0, 最大:50 }, 学分:{ 启用:假 }, 系列: [{ 名称:'温度', 数据:[parseFloat(温度)], 数据标签:{ 格式:'{y}
' + '摄氏度' }, 工具提示:{ 值后缀:'°C' } }] })); //湿度计 $('#container-湿度').highcharts(Highcharts.merge(gaugeOptions, { y轴:{ 停止:[ [1, '#55BF3B'], // 绿色 [0.55, '#DDDF0D'], // 黄色 [0.8, '#DF5353'] // 红色 ], 分钟:0, 最大:100 }, 学分:{ 启用:假 }, 系列: [{ 名称:'湿度', 数据:[parseFloat(湿度)], 数据标签:{ 格式:'{y:.1f}
' + '%r' }, 工具提示:{ 值后缀:'%rh' } }] })); // 大气压表 $('#container-pressure').highcharts(Highcharts.merge(gaugeOptions, { y轴:{ 停止:[ [1, '#55BF3B'], // 绿色 [0.55, '#DF5353'] // 红色 ], 分钟:0, 最大:20 }, 学分:{ 启用:假 }, 系列: [{ 名称:“大气压力”, 数据:[parseFloat(压力)], 数据标签:{ 格式:'{y:.1f}
' + '* 100 小时巴' }, 工具提示:{ 值后缀:'hpa' } }] })); 设置间隔(函数(){ $.getJSON("http://openweather.in/localpublish/livedata.php", function(data) { 控制台.log(数据); 温度=数据[0].温度; 湿度=数据[0]。湿度; 压力=数据[0].压力; 风速=数据[0].风速; 风向=数据[0].风向; 光=数据[0].光; 降雨量 = 数据 [0].Rainfall; 海拔=数据[0]。海拔; 纬度=数据[0].纬度; lang = 数据[0].Lang; bvolt = 数据[0].Bvolt; bcurrent = 数据[0].Bcurrent; svolt =数据[0].svolt; 电流 = 数据 [0].电流; }); 点 = $('#container-temperature').highcharts().series[0].points[0]; point.update(parseFloat(温度)); 点 = $('#container-湿度').highcharts().series[0].points[0]; point.update(parseFloat(湿度)); point = $('#container-pressure').highcharts().series[0].points[0]; point.update(parseFloat(压力)); /* 点 = $('#container-windspeed').highcharts().series[0].points[0]; point.update(风速); 点 = $('#container-winddirection').highcharts().series[0].points[0]; 点.更新(风向); 点 = $('#container-light').highcharts().series[0].points[0]; 点.更新(光); 点 = $('#container-rainfall').highcharts().series[0].points[0]; 点.更新(降雨); point = $('#container-elevation').highcharts().series[0].points[0]; 点。更新(海拔); 点 = $('#').highcharts().series[0].points[0]; point.update(湿度); 温度 = bvolt + 'V'; $('#disp-batteryV').val(temp); 温度 = bcurrent + 'mA'; $('#disp-batteryC').val(temp); 温度 = 伏特 + 'V'; $('#disp-solarV').val(temp); 温度=电流+“毫安”; $('#disp-solarC').val(temp); */ }, 1*60*1000); });

【讨论】:

    猜你喜欢
    • 2019-12-31
    • 2021-05-11
    • 2020-12-12
    • 2019-01-11
    • 2019-04-28
    • 2016-08-02
    • 2018-02-19
    • 2019-02-08
    • 2021-07-12
    相关资源
    最近更新 更多