在上一篇博客:C#曲线分析平台的制作(三,三层构架+echarts显示)中已经完成了后台的三层构架的简单搭建,为实现后面的拓展应用开发和review 改写提供了方便。而在曲线分析平台中,往往有要求时间轴联动功能,即不仅能够实时的查看在线曲线,还要能通过拉动时间轴来实现往期数据的回顾。在这一点上highcharts旗下的highstock很好的实现了时间轴联动功能,故而制作一个小demo来进行学习,演示。

1.后台数据模拟:

依据上一篇博客建立的数据库,进行数据填充:

declare @DateTime datetime
declare @EndDateTime datetime
declare @Sgrade float
set @DateTime='2018-6-30'
set @EndDateTime = '2018-7-2'
while @DateTime <= @EndDateTime
begin
set @Sgrade=cast(floor(rand()*1000) as float)
insert into Student(Datetimee,Sgrade) values(@DateTime,@Sgrade)
--每5分钟记录一个数据
set @DateTime=DATEADD(n, +5, @DateTime)
end

2.前台ajax改写:

a.准备工作:(导入相关的js)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><script src="Scripts/jquery-3.3.1.js"></script><script src="https://img.hcharts.cn/jquery/jquery-1.8.3.min.js"></script><script src="https://img.hcharts.cn/highstock/highstock.js"></script><script src="https://img.hcharts.cn/highcharts/modules/exporting.js"></script><script src="https://img.hcharts.cn/highcharts-plugins/highcharts-zh_CN.js"></script><script src="https://img.hcharts.cn/highcharts/themes/grid-light.js"></script><script src="http://google.github.io/traceur-compiler/bin/traceur.js" type="text/javascript"></script><title></title>
</head>
<body><div id="main" style="width: 1500px;height:400px;"></div><script  src="JavaScript.js"></script>
</body>
</html>

b.javascript.js编写:

Highcharts.setOptions({global: {useUTC: false}
});
var chart = null;
var names = [];
// Create the chart
$(document).ready(function () {seriesOptions = [];chart = new Highcharts.stockChart({chart: {renderTo: 'main',type: 'spline',},rangeSelector: {buttons: [{type: 'minute',count: 5,text:'5分钟',},{type: 'hour',count: 1,text: '小时'}, {type: 'day',count: 1,text: '一天'}, {type: 'all',text: '所有'}],inputEnabled: false,selected: 0,},title: {text: 'highstock test demo'},tooltip: {split: false},exporting: {enabled: true},xAxis: {type: 'datetimee',data: datatim,tickPixelInterval: 150,maxZoom: 20 * 1000},yAxis: {minPadding: 0.2,maxPadding: 0.2,title: {text: 'sgrade',margin: 80}},series: [{name: 'demo',data:[],}]});var datatim = [];$.ajax({type: "post",async: false,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url: "Default.aspx?method=getdata",data: {},dataType: "json",        //返回数据形式为jsonsuccess: function (result) {for (i in result) {var r = result[i];datatim.push([r.datetimee, r.Sgrade]);//利用push方法将其格式固定为[x,y]方式。}//var datatim = result.map(function (user) { //利用map方法将返回的对象数组中对应的点取出//    return [user.datetimee, user.Sgrade]; //返回相应的[x,y]数组格式//});console.log(datatim);/*测试setdata支持的数据格式var array = [12, 3, 4, 5, 6, 78, 9, 22];var array1 = [['2015-05-27 00:06:00', 11], ['2015-05-28 00:07:00', 12], ['2015-06-28 00:08:00', 128]];chart.series[0].setData(array1);*/chart.series[0].setData(datatim);chart.series[0].addPoint(['2015-06-30 00:03:00', 128]);   //测试addPoint方法(添加点到曲线的末尾)},})})

c.效果:

3.要点整理:

主要利用ajax从后台接收到的对象数组类型,如下格式:

[{datetimee: "2018-06-30 00:00:00", Sgrade: 169}, {datetimee: "2018-06-30 00:05:00", Sgrade: 86},…]

highstock的数据格式采用的是[[时间,数据],[时间,数据],[时间,数据],[时间,数据]]

然后转换成highcharts能接受的数据格式即可。

1.chart.series[0].setData()能接收的类型:(点击打开链接)

2.转换方法:1.利用数组的push方法,将格式固定[x,y]。2.主要利用map方法,将其中的datetimee和sgrade对应的值取出来,重新构成数组:[[x,y]](JS的map方法介绍)

4:时间轴缩放:

增加时间轴的缩放功能(实际上就是让datetime正确显示即可)

   var datatim = [];var time = [];$.ajax({type: "post",async: false,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url: "Default.aspx?method=getdata",data: {},dataType: "json",        //返回数据形式为jsonsuccess: function (data) {//for (i in result) {//    var r = result[i];//    datatim.push([r.datetimee, r.Sgrade]);//利用push方法将其格式固定为[x,y]方式。//    time.push([r.datetimee]);//}data.forEach(function (e, j) {var a = new Array();console.log(e.datetimee);a.push(Date.parse(e.datetimee));a.push(e.Sgrade);datatim.push(a);});//var datatim = result.map(function (user) { //利用map方法将返回的对象数组中对应的点取出//    return [user.datetimee, user.Sgrade]; //返回相应的[x,y]数组格式//});console.log(datatim);/*测试setdata支持的数据格式var array = [12, 3, 4, 5, 6, 78, 9, 22];var array1 = [['2015-05-27 00:06:00', 11], ['2015-05-28 00:07:00', 12], ['2015-06-28 00:08:00', 128]];*/console.log(Date.parse('2015-05-28 00:08:00'));//console.log(leave);chart.series[0].setData(datatim);//chart.series[0].addPoint(['2015-06-30 00:03:00', 128]);   //测试addPoint方法(添加点到曲线的末尾)},})

原理:highcharts能接收的时间类型为时间戳类型,故而需要利用js自带的Date.parse(Datetime)将其转换为时间戳类型。转换后导入x轴数组即可实现时间轴拖动缩放。

参考资料:JS时间戳与时间格式互换

5:动态加载:

在新项目中,一般如何实现对数据的动态加载展示是一个很炫的问题。让曲线动起来,本文采用比较传统的方式,直接设置setInterval(),定时ajax局部加载即可。

a.数据准备:

利用SQL SERVER自带的作业功能,对插入语句进行定时执行,实现每10秒中插入一次数据。

SQL 语句:

declare @i int
declare @datetimee datetime
set @datetime=CONVERT(varchar,GETDATE(),120)
set @i=cast( floor(rand()*N) as int )
begin
insert into student(datetimee,sgrade) values (@datetimee,@i)
end

b.改写javascript.js(将ajax部分进行函数封装调用SetInterVal()执行)

    function getdata() {var datatim = [];var time = [];$.ajax({type: "post",async: false,            //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)url: "Default.aspx?method=getdata",data: {},dataType: "json",        //返回数据形式为jsonsuccess: function (data) {//for (i in result) {//    var r = result[i];//    datatim.push([r.datetimee, r.Sgrade]);//利用push方法将其格式固定为[x,y]方式。//    time.push([r.datetimee]);//}data.forEach(function (e, j) {var a = new Array();console.log(e.datetimee);a.push(Date.parse(e.datetimee));a.push(e.Sgrade);datatim.push(a);});//var datatim = result.map(function (user) { //利用map方法将返回的对象数组中对应的点取出//    return [user.datetimee, user.Sgrade]; //返回相应的[x,y]数组格式//});console.log(datatim);/*测试setdata支持的数据格式var array = [12, 3, 4, 5, 6, 78, 9, 22];var array1 = [['2015-05-27 00:06:00', 11], ['2015-05-28 00:07:00', 12], ['2015-06-28 00:08:00', 128]];*/console.log(Date.parse('2015-05-28 00:08:00'));//console.log(leave);chart.series[0].setData(datatim);//chart.series[0].addPoint(['2015-06-30 00:03:00', 128]);   //测试addPoint方法(添加点到曲线的末尾)},})}setInterval(getdata, 10000);

c.实现效果:

未完待续:

1.利用时间选择工具,选择相应时间段内的曲线部分。

2.利用树形工具,选择多条曲线。

转载于:https://www.cnblogs.com/cache-yuan/p/10104250.html

C#曲线分析平台的制作(四,highcharts+ajax加载后台数据)相关推荐

  1. 第四回-MBR加载与执行实验

    本回我们进行一次实验性的实操环节,机器上电运行相应BIOS代码,然后BIOS加载硬盘的MBR分区内容,并执行MBR代码.本次实验使用Bochs虚拟机模拟整个x86架构的真实机器.实验过程中我们需要为B ...

  2. 网站性能分析(下)-让网站并行加载但顺序执行JS

    如果网站不支持JavaScript,复杂的功能将无法正常工作.在开发当中通常有几个脚本会写在HTML文件的头部.你嵌入的越多,网站的速度潜在的变得越慢.因此提高并行加载速度变得非常有必要,在前面的文章 ...

  3. 兄弟连区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令一

    区块链教程Fabric1.0源代码分析Peer peer根命令入口及加载子命令,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初 ...

  4. cbitmap 从内存中加载jpg_Pytorch数据加载的分析

    Pytorch数据加载的效率一直让人头痛,此前我介绍过两个方法,实际使用后数据加载的速度还是不够快,我陆续做了一些尝试,这里做个简单的总结和分析. 1.定位问题 在优化数据加载前,应该先确定是否需要优 ...

  5. 从源码分析Android的Glide库的图片加载流程及特点

    转载:http://m.aspku.com/view-141093.html 这篇文章主要介绍了从源码分析Android的Glide库的图片加载流程及特点,Glide库是Android下一款人气很高的 ...

  6. android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片

    图形图像实践 android全平台编译libjpeg-turbo并基于ANativeWindow加载JPEG图片 android全平台编译libpng并基于ANativeWindow加载PNG图片 概 ...

  7. Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

    Android 应用开发 之通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比 标签: AndroidAsyncTaskThreadPool异步加载view 2 ...

  8. vb wps 链接单元格_使用VB快速制作WPS的COM加载项

    使用VB快速制作WPS的COM加载项 2018-09-14 1.新建工程,选择ActiveX Dll. 2.工程.引用.选择Kingsoft Add-In Designer.Kingsoft Offi ...

  9. 阵列卡服务器启动不到pe桌面,制作启动u盘加载阵列卡驱动无法安装怎么办

    制作启动u盘加载阵列卡驱动无法安装怎么办?安装服务器时碰到没有阵列卡驱动无法安装的问题大家应该都碰到过.之前一次安装2003碰到没阵列卡驱动,解决的办法比较土,上网下了张别人做好的集成了raid驱动的 ...

最新文章

  1. python在线编辑器最新_Editor.md 二次开发-markdown在线编辑器
  2. 编程之美-寻找最大的k个数
  3. socket编程的select模型
  4. python字符串去头尾_悉尼大学某蒟蒻的Python学习笔记
  5. linux安装docker部署java项目
  6. 面向对象的接口思想与函数式编程
  7. 在 Linux 中安装 VMware Tools
  8. ModuleNotFoundError: No module named ‘yaml‘
  9. Source Insight中的正则表达式和快捷键
  10. 软件测试面试题:和用户共同测试(UAT测试)的注意点有哪些?
  11. http协议服务器错误代码稍后再试,Http协议常见错误码说明解析
  12. 360的服务器在哪个文件夹,360rec是什么文件夹?可以删除吗?
  13. 学习配置tomcat虚拟主机
  14. 单例模式——国庆收心
  15. 使用canvas绘制笑脸
  16. 新手学做网站的建议教程
  17. JS处理JSON字符串转数组,数字超17为处理方法
  18. Nginx用户访问及密码验证
  19. Git三大特色之Branch(分支)
  20. 新出生的机器狗,打滚1小时后自己掌握走路,吴恩达开山大弟子最新成果

热门文章

  1. *【HDU - 4272 】LianLianKan (dfs 或 状压dp,贪心不行)
  2. 【牛客 - 317C】小a与星际探索(背包dp 或 线性基)
  3. 【牛客 - 303H第十五届浙江大学宁波理工学院程序设计大赛(同步赛)】Protoss and Zerg(快速幂取模,组合数学)
  4. 【CodeForces - 1060C】Maximum Subrectangle (思维,预处理前缀和,dp,枚举长度)
  5. ☆【CodeForces - 764C】Timofey and a tree (思维题,树的性质)
  6. 【HihoCoder - 1268】九宫 (dfs,深搜)
  7. 从零实现一个3D目标检测算法(3):PointPillars主干网实现(持续更新中)
  8. 虚拟机安装Linux(vmware + ubuntu)
  9. java猜数游戏图形界面_Java做一个猜数的小游戏
  10. esxi服务器与虚拟机时间不符,vsphere6.7-虚拟机与ESXI时间同步