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

       在上一篇博客: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国际C语言混乱代码大赛结果公布

国际C语言混乱代码大赛&#xff08;IOCCC, The International Obfuscated C Code Contest&#xff09;是一项国际编程赛事&#xff0c;从1984年开始&#xff0c;每年举办一次&#xff08;1997年、1999年、2002年、2003年和2006年例外&#xff09;。目的是写出最有创意的最让人难…

JDBC连接数据库(一)

原文地址http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html JDBC连接数据库 创建一个以JDBC连接数据库的程序&#xff0c;包含7个步骤&#xff1a; 1、加载JDBC驱动程序&#xff1a; 在连接数据库之前&#xff0c;首先要加载想要连接的数据库的驱动到JVM…

eclipse加速之禁用 JS、jsp 等文件的语法验证

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 去除eclipse的JS验证&#xff1a; 将windows->preference->Java Script->Validator->Errors/Warnings-> Enable Javascr…

学成在线--22.课程营销

文章目录一.需求分析二.数据模型三.服务端1.Api接口1&#xff09;查询课程营销信息2&#xff09;更新课程营销信息2.Dao3.Service4.Controller四.前端1.Api 方法2.编写 course_marketinfo.vue1&#xff09;template2&#xff09;数据对象3&#xff09;保存方法4&#xff09;在m…

电子邮件系统

&#xff08;一&#xff09;电子邮件系统的构成 1.用户代理 用户与电子邮件系统的接口&#xff0c;用户代理使用户能够通过一个很友好的接口来发送和接收邮件&#xff0c;用户代理就是一个运行在PC上的程序。 2 邮件服务器 邮件服务器的功能是发送和接收邮件&#xff0c;同…

面向对象的接口类 以及鸭子类型

1.接口类,抽象类. 2.鸭子类型(Python多态)(Python三大特性之一)Python封装 1.接口类和抽象类只是在工作中书写的一种规范. class QQ: def pay(self,money): print("使用QQ支付%s"%money) class Ali: def pay(self,money): print("使用支付宝支付%s"%money…

mysql查看binlog日志内容

2019独角兽企业重金招聘Python工程师标准>>> &#xff08;一&#xff09; binlog介绍 binlog,即二进制日志,它记录了数据库上的所有改变&#xff0c;并以二进制的形式保存在磁盘中&#xff1b; 它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制&…

架构师:我们需要顶层设计

架构师&#xff1a;我们需要顶层设计背景&#xff1a; 某公司&#xff0c;建立的程序又被推倒&#xff0c;外人觉得很奇怪&#xff0c;这个程序的主管非常敬业&#xff0c;关注到了程序每一个细节&#xff0c;甚至包括每一个按钮的文字和位置。这个主管很委屈&#xff0c;他说…

文件传输协议FTP

文件传输协议FTP提供交互式的访问&#xff0c;允许客户指明文件的类型和格式&#xff0c;并允许文件具有存取权限。它屏蔽了个计算机系统的细节&#xff0c;因而适合于在异构网络中任意计算机之间传输文件。它提供不同种类主机系统之间的文件传输能力&#xff0c;可以提供用户对…

Centos7安装Docker教程

1.首先安装必要依赖&#xff1a; sudo yum install -y yum-utils device-mapper-persistent-data lvm22.然后添加仓库源&#xff1a; sudo sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.最后安装 Docker&#xff…

String.format() 方法用法解说

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 String chargeFlowUrl _AGENT_URL "?agentAccount" _AGENT_ACCOUNT "&sequence%s &phone%s &iceUrl%s &…

Choose unique values for the 'webAppRootKey' context-param in your web.xml files! 错误的解决

大意是Log4jConfigListener在获取webapp.root值时&#xff0c;被后一context的值替换掉了&#xff0c;所以要在各个项目的web.xml中配置不同的webAppRootKey值&#xff0c;随即在其中一个web.xml中添加&#xff1a; <context-param> <param-name>webAppRootKey<…

ionic3 cordova ionic-native插件

ionic-native插件 cordova安装插件 以及 ionic-native插件使用过程以及步骤 cordova plugin add cordova-plugin-插件名称。 //安装插件npm install ionic-native/对应插件名称 --save。 //写入package.json在app.module.ts 的 providers 进行引用解释&#xff1a;cordove plug…

Diango博客--19.使用 Docker部署项目到线上服务器

文章目录1.克隆代码到服务器2.创建环境变量文件用于存放项目敏感信息3.在 .production 文件写入下面的内容并保存4.修改 Nginx 配置5.修改项目配置文件6.启动容器7.检查容器启动状况8.配置 HTTPS 证书&#xff08;没有配置域名无法配置&#xff0c;只能通过服务器 ip 以 HTTP 协…

从一生的角度看程序员的学习和发展

很多人谈学习和发展的时候&#xff0c;往往忽略人的先天自然条件&#xff0c;在这里我们从这个视角切入&#xff0c;来探讨一下程序员一生的可能轨迹。 如果把程序员的人生分为三个阶段&#xff0c;那么他们是&#xff1a; 毕业~30岁&#xff1a;这个时间段里&#xff0c;大多…

Jquery Datatable 数据填充报错:requested unknown parameter ‘XXX‘ for row xx, column xx 解决方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如图&#xff1a; 解决方法见官网&#xff1a;https://datatables.net/manual/tech-notes/4 摘要如下&#xff1a; Parameter is an…

Tarjan-缩点

$Tarjan$缩点 Tarjan的第二个应用就是求缩点啦。缩点虽然比割点麻烦一点&#xff0c;但是用处也比割点要大不少。 本来要学另外两个缩点算法的,但是似乎没什么用...$MST$里确实有只能有$prim$或者只能用$kruscal$的题目&#xff0c;但是这三种缩点...在网上没有找到介绍它们之间…

mysqldump参数详细说明(转)

Mysqldump参数大全&#xff08;参数来源于mysql5.5.19源码&#xff09; 参数 参数说明 --all-databases , -A 导出全部数据库。 mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导出全部表空间。 mysqldump -uroot -p --all-databases --all-tablespaces --n…

Diango博客--20.开启 Django 博客的 RSS 功能

1.Rss简介 博客提供 RSS 订阅应该是标配&#xff0c;这样读者就可以通过一些聚合阅读工具订阅你的博客&#xff0c;时时查看是否有文章更新&#xff0c;而不必每次都跳转到博客上来查看。现在我们就来为博客添加 RSS 订阅功能。 RSS&#xff08;Really Simple Syndication&am…

什么是P2P

P2P技术又称为点对点传输技术。举个简单的例子&#xff0c;以便可以更好的理解。比如&#xff0c;以前我们要下载一个文件&#xff0c;我们一定要从服务器下载。有了P2P技术之后&#xff0c;我们可以向其它下载过这个文件的电脑获取这个文件&#xff0c;我下载完成了这个文件之…