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

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Java使用POI-TL和JFreeChart动态生成Word报告

《Java使用POI-TL和JFreeChart动态生成Word报告》本文介绍了使用POI-TL和JFreeChart生成包含动态数据和图表的Word报告的方法,并分享了实际开发中的踩坑经验,通过代码... 目录前言一、需求背景二、方案分析三、 POI-TL + JFreeChart 实现3.1 Maven

Java导出Excel动态表头的示例详解

《Java导出Excel动态表头的示例详解》这篇文章主要为大家详细介绍了Java导出Excel动态表头的相关知识,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录前言一、效果展示二、代码实现1.固定头实体类2.动态头实现3.导出动态头前言本文只记录大致思路以及做法,代码不进

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R