jqplot通过ajax动态画折线图的方法及思路


Posted in Javascript onDecember 08, 2013

jqplot通过ajax动态画折线图的方法及思路

效果如图所示,每个五秒钟图会移动一次(其实是重新画了一张图),能显示所监控的cpu信息。

pastCpuInfomation函数主要用来显示一张折线图

updateCpuPic函数把5秒前的图去掉,重新根据现有数据画一张图。

updateCpuInfomation函数 把最新的点加入存储折线的数组中

再接着在界面中弄两个定时器,让他们每个5秒执行一次updateCpuPic,每个1分钟执行一次updateCpuInfomation,图画就动起来了。

PS:代码中执行好多操作前都会在服务器中获取下服务器的当前时间 ,ajax写得有点乱,我也不知道规不规范,实现动态图的方法好像也不是太好,最好是能直接更新线的数据的,希望朋友们多多指教!画表的代码已经标红(30行到60行)

var past_cpu_service_statistics_line = new Array();
var plot;
function pastCpuInfomation() {
    // 历史cpu数据
    // 本地时间    $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        url: globalObj.path + '/server/getServerCurrentTime.htm',
        success: function(currentTime){
            console.log("取到服务器时间"+currentTime);
            //获取历史cpu数据
            $.ajax({
                type: "POST",
                contentType: "application/x-www-form-urlencoded;charset=UTF-8",
                url: globalObj.path + '/server/getPastCpuMonitorData.htm',
                // startTime endtime 是伪数据,时间在后台获取
                data: "hostName=" + "login.cheos.cn",
                success: function(result){
                    for (key in result) {
                        // 去得到时间转化为int
                        var intKey = parseInt(key);
                        var transferTime = new Date(intKey);
                        console.log("transferTime:"+ key + "----resut:" + transferTime);
                        var onePoint = [transferTime, result[key] ];
                        past_cpu_service_statistics_line.push(onePoint);
                    }
                   <span style="color:#ff0000;"> // 历史cpu情况表
                    plot= $.jqplot('cpuHistory',[ past_cpu_service_statistics_line ],
                            {
                                axes: {
                                    xaxis: {
                                        label: '时间',
                                        renderer: $.jqplot.DateAxisRenderer,
                                        tickOptions: {
                                            formatString: '%Y-%#m-%d %H:%M'
                                        },
                                        min : (currentTime -1000 * 60 * 60),
                                        max: (currentTime),
                                    // 横(纵)坐标显示的最小值
                                    // ticks:['']
                                    },
                                    yaxis: {
                                        label: 'cpu监控',
                                    }
                                },
                                highlighter: {
                                    show: true,
                                    sizeAdjust : 7.5
                                },
                                cursor: {
                                    show: false
                                }
                            });
 </span>
                },
                error: function(textStatus){
                    alert("获取监控信息失败!");
                }
            });
            //获取历史cpu数据ajax结束
        },
        error: function(textStatus){
            alert("取历史cpu数据时候获取服务器时间失败!");
        }
    });     
}
function updateCpuPic() {
    console.log("正在更新cpu视图");
//先取得服务器时间,用来画横坐标
    $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        url: globalObj.path + '/server/getServerCurrentTime.htm',
        success: function(result){
            var intKey =parseInt(result);
            var transferTime = new Date(intKey);
            console.log("获取到服务器时间:"+result+"------"+transferTime);
        //操作图表
            //如果已经存在图表,则摧毁
            if (plot) {
                // plot.destory();
                $("#cpuHistory").unbind();
                $("#cpuHistory").empty();
                plot= null;
            }
            //重新画图表
            plot= $.jqplot('cpuHistory',[ past_cpu_service_statistics_line ], {
                axes: {
                    xaxis: {
                        label: '时间',
                        renderer: $.jqplot.DateAxisRenderer,
                        tickOptions: {
                            formatString: '%Y-%#m-%d %H:%M'
                        },
                        min: (result - 1000 * 60 * 60),
                        max: (result),
                    // 横(纵)坐标显示的最小值
                    // ticks:['']
                    },
                    yaxis: {
                        label: 'cpu监控',
                    }
                },
                highlighter: {
                    show: true,
                    sizeAdjust: 7.5
                },
                cursor: {
                    show: false
                },
                replot: {
                    resetAxes: true
                }
            });
        },
        error: function(textStatus){
            alert("获取服务器时间失败!");
        }
    });
 
}
function updateCpuInfomation() {
    $.ajax({
        type: "POST",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        url: globalObj.path + '/server/getLatestCpuMonitorData.htm',
        data: "hostName=" + "login.cheos.cn",
        success: function(result){
            // 更新一次数据
            for (key in result) {
                var intKey = parseInt(key);
                var transferTime = new Date(intKey);
                console.log("----------------更新cpu信息---:" + key + "----更新时间:" + transferTime);
                var onePoint = [transferTime, result[key] ];
                past_cpu_service_statistics_line.push(onePoint);
            }
            // 更新图表
        //  updateCpuPic();
        },
        error: function(textStatus){
            alert("更新cpu信息失败!");
        }
    });
}
Javascript 相关文章推荐
Jquery中增加参数与Json转换代码
Nov 20 Javascript
js点击页面其它地方将某个显示的DIV隐藏
Jul 12 Javascript
特殊情况下如何获取span里面的值
May 20 Javascript
JQuery中基础过滤选择器用法实例分析
May 18 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
深入理解AngularJs-scope的脏检查(一)
Jun 19 Javascript
js使用html2canvas实现屏幕截取的示例代码
Aug 28 Javascript
vue生成随机验证码的示例代码
Sep 29 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 Javascript
Vue如何获取数据列表展示
Dec 11 Javascript
详解JavaScript 的执行机制
Sep 18 Javascript
vantUI 获得piker选中值的自定义ID操作
Nov 04 Javascript
JavaScript 32位整型无符号操作示例
Dec 08 #Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
Dec 08 #Javascript
js快速排序的实现代码
Dec 08 #Javascript
Javascript中匿名函数的多种调用方式总结
Dec 06 #Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
Dec 06 #Javascript
JavaScript作用域与作用域链深入解析
Dec 06 #Javascript
深入解析JavaScript中的变量作用域
Dec 06 #Javascript
You might like
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
js资料toString 方法
2007/03/13 Javascript
javascript  Error 对象 错误处理
2008/05/18 Javascript
js 返回时间戳所对应的具体时间
2010/07/20 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
js获取php变量的实现代码
2013/08/10 Javascript
js里取容器大小、定位、距离等属性搜集整理
2013/08/19 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
Vue 封装防刷新考试倒计时组件的实现
2020/06/05 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python实现汉诺塔方法汇总
2016/07/25 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python编写Logistic逻辑回归
2020/12/30 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
Python 带有参数的装饰器实例代码详解
2018/12/06 Python
python安装requests库的实例代码
2019/06/25 Python
Python实现字符串中某个字母的替代功能
2019/10/21 Python
python在不同条件下的输入与输出
2020/02/13 Python
电子商务专业求职信
2014/03/08 职场文书
幼儿园开学寄语
2014/04/03 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
在校生证明
2015/06/17 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby