Heighcharts ajax 动态更新链接状态图

2024-03-24 18:48

本文主要是介绍Heighcharts ajax 动态更新链接状态图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、引言

要实现上面的效果。主要应用Heighcharts ,Heighcharts是一个对个人免费的高效率的前端画图组建,商业收费。图形出来会有heighcharts的网址,不过可以破解。

 

二、原理

 原理很简单,Heighcharts进行画图显示,ajax动态更新数据,把更新的数据应用到heighcharts上去。

三、实现

Heighcharts 提供了很多用例,也提供了很多api函数,纯做一个heighcharts,难度不大。刚开始也根据例子做了cpu与内存监控图。没有用到ajax。很轻松完成。后面需要做连接监控图,需要结合ajax。

我应用的是prototype,自然很轻易的就得到了数据。

new Ajax.Request('<?=$this->url('XXX') ?>', { method:'post',

             onSuccess: function(data) {

            try{

                    alert(eval(data.responseText));

            }catch(e) { alert(e.message)

            }

        }

  });

问题来了,怎么把得到的ajax数据调用到heigcharts上。我图简单(js不过关)就想直接把ajax封装成一函数,然后把数据返回应用到heighcharts,搞了一天,都没数据弄出来,最后网上查了一下,有网友问个这个问题,但没得到解决答案,只能最终放弃。

后面参考了别人的代码,把chart设为全局变量调用到ajax里实现。终于找到了解决方案。写了半天,最后得到一个图

随着时间的增加,图形变化,但原来的图貌似没删除掉的。调式了半天没结果。Highcharts的       enginConn_chart.redraw();重画函数与

for(var k =0;k<= enginConn_chart.series.length - 1; k-++){

              enginConn_chart.series[k].remove();

    }

删除函数都有用到,实在么办法了,就请教我的师傅,师傅果然就是师傅,把

for(var k =0;k<= enginConn_chart.series.length - 1; k-++){

              enginConn_chart.series[k].remove();

    }

 

改成

for(var k = enginConn_chart.series.length - 1; k >= 0; k--){

              enginConn_chart.series[k].remove();

    }

显示正常。佩服!

代码:

var enginConn_chart;

 

function get_enginConn_data(){

       new Ajax.Request('<?=$this->url('XX) ?>', { method:'post',

             onSuccess: function(data) {

            try{

                   update_enginConn_chart(eval(data.responseText));

            }catch(e) { //alert(e.message)

            }

        }

  });

}

 

function update_enginConn_chart(data){

       enginConn_chart.redraw();

       var smain_data=[];

       var cmain_data=[];

       var tmain_data=[];

       for (var key in data) { 

                if (data.hasOwnProperty(key)) {

                       if(key=="main"){

                            var   smain=data.main.s;

                            var   cmain=data.main.c;

                            var   tmain=data.main.to; 

                       }

              }

       }

 

       time = (new Date()).getTime();

       for (var i = 0; i < smain.length; i++) {

        var svalue = smain[i];

        if(svalue==0){

               svalue=Math.random() * 100;

        }

        smain_data.push({ y : svalue, x : time - i*10000});

    }

       for (var i = 0; i < cmain.length; i++) {

        var cvalue = cmain[i];

        if(cvalue==0){

               cvalue=Math.random() * 100;

        }

        cmain_data.push({ y : cvalue, x : time - i*10000});

    }

       for (var i = 0; i < tmain.length; i++) {

        var tvalue = tmain[i];

        if(tvalue==0){

               tvalue=Math.random() * 100;

        }

        tmain_data.push({ y : tvalue, x : time - i*10000});

    }

   

    for(var k = enginConn_chart.series.length - 1; k >= 0; k--){

              enginConn_chart.series[k].remove();

    }

      

      

       enginConn_chart.addSeries({

            name: '服务器端 ',

            data: smain_data,

            color: '#0066FF'

       }

       );

      

       enginConn_chart.addSeries({

            name: '客户端 ',

            data: cmain_data,

            color: '#006633'

       }

       );

 

       enginConn_chart.addSeries({

            name: 'Total ',

            data: tmain_data,

            color: '#FF6600'

       }

       );

      

}

 

Highcharts.setOptions({

                            global: {

                                   useUTC: false

                            }

                     });

                           

 

                    

jQuery(document).ready(function() {

                            name='';

                            data=[];

                           

                            enginConn_chart = new Highcharts.Chart({

                                   chart: {

                                          renderTo: '_connmain_',

                                          defaultSeriesType: 'spline',

                                          marginRight: 10,

                                          marginTop: 10

                                   },

                                  

                                   title: {

                                          text: ''

                                   },

                                   xAxis: {

                                          type: 'datetime',

                                          tickPixelInterval: 120

                                   },

                                   yAxis: {

                                          title: {

                                                 text: '保持连接数/个'

                                          },

                                          min:0,

                                          minPadding: 0.5,

                                      maxPadding: 0.5,

 

                                          plotLines: [{

                                                 value: 0,

                                                 width: 1,

                                                 color: '#87BED3'

                                          }]

                                   },

                                    plotOptions: {

                                    series: {

                                        lineWidth: 1,

                                                

                                                 dashStyles:'Solid',

                                                 shadow: false,

                                                 states: {

                                              hover: {

                                                  enabled: true,

                                                lineWidth: 1

                                            }    

                           

                                        },

                            

                                  

                                   marker: {

                                                        enabled: false,

                                                        states: {

                                                               hover: {

                                                                      enabled: true,

                                                                      symbol: 'circle',

                                                                      radius: 3,

                                                                      lineWidth: 1

                                                               }

                                                        }    

                                                 }

                                          }

                         },

 

                                   tooltip: {

                                          formatter: function() {

                                            return Highcharts.numberFormat(this.y, 2);

                                          }

                                   },

                                   legend: {

                                          enabled: true,

                                         

                                          borderWidth: 1

                                  

                                   },

                                   exporting: {

                                          enabled: false

                                   },

                                   series: [

                                   { 

                                       name: name,

                                          color: '#0066FF',

                                          data: data

                                   }

                                   ]

                            });

                           

                           

                     });

 

get_enginConn_data();

window.setInterval(get_enginConn_data, 10000);

 

四、总结

1、前前后后这个东西折腾我三天,后来向大牛请教,5-6分钟就搞定,得多请教多交流。

2、方法不行,就应该立即换方法。

3、多看别人提供你的东西。就是别重复你自己,但要善用别人的东西。之前折腾了一段时间与ajax结合,其实人家都有这例子,我没看。

 

highcharts有网友说比较耗内存,我到没测试过。希望有真实的数据证明。

这篇关于Heighcharts ajax 动态更新链接状态图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842449

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

mybatis-plus 实现查询表名动态修改的示例代码

《mybatis-plus实现查询表名动态修改的示例代码》通过MyBatis-Plus实现表名的动态替换,根据配置或入参选择不同的表,本文主要介绍了mybatis-plus实现查询表名动态修改的示... 目录实现数据库初始化依赖包配置读取类设置 myBATis-plus 插件测试通过 mybatis-plu

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配