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", //返回数据形式为json
success: 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", //返回数据形式为json
success: 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", //返回数据形式为json
success: 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.利用树形工具,选择多条曲线。
C#曲线分析平台的制作(四,highcharts+ajax加载后台数据)的更多相关文章
- C#曲线分析平台的制作(六,Sqldependency+Signalr+windows 服务)
在经过五天的学习和资料收集后,终于初步实现了利用sqldependency进行数据库变化监控,signalr进行前后台交互,数据实时更新.下面将源代码贴出进行初步分析: 1.系统整体框架构成: 2.具 ...
- C#曲线分析平台的制作(一,ajax+json前后台数据传递)
在最近的项目学习中,需要建立一个实时数据的曲线分析平台,这其中的关键在于前后台数据传递过程的学习,经过一天的前辈资料整理,大概有了一定的思路,现总结如下: 1.利用jquery下ajax函数实现: & ...
- C#曲线分析平台的制作(五,Sqldependency+Signalr+windows 服务 学习资料总结)
在前篇博客中,利用interval()函数,进行ajax轮询初步的实现的对数据的实时显示.但是在工业级别实时显示中,这并非是一种最好的解决方案.随着Html5 websocket的发展,这种全双工的通 ...
- C#曲线分析平台的制作(三,三层构架+echarts显示)
本文依据CSDN另一位网友关于三层构架的简单搭建,基于他的源码进行修改.实现了三层构架合理结构,以及从数据库中传递数值在echarts显示的实验目的. 废话不多说,show me codes: 具体构 ...
- C#曲线分析平台的制作(二,echarts前后台数据显示)
在上一篇博客中,学习了使用javascript和jquery两种方法来进行前后台交互.本篇博客着重利用jquery+echarts来实现从后台取数,从前端echarts中展示. 1.html页面编写: ...
- Highcharts 基本曲线图;Highcharts 带有数据标签曲线图表;Highcharts 异步加载数据曲线图表
Highcharts 基本曲线图 实例 文件名:highcharts_line_basic.htm <html> <head> <meta charset="U ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
- Swift语法基础入门四(构造函数, 懒加载)
Swift语法基础入门四(构造函数, 懒加载) 存储属性 具备存储功能, 和OC中普通属性一样 // Swfit要求我们在创建对象时必须给所有的属性初始化 // 如果没办法保证在构造方法中初始化属性, ...
- 四种加载React数据的技术对比(Meteor 转)
1.四种加载React数据的技术对比(Meteor 转) : https://sanwen8.cn/p/31e4kdE.html 2. Meteor + Appolo TelescopeJS/Te ...
随机推荐
- Reactor3 中文文档(用户手册)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 精通Proteus仿真器件制作(3)DLL仿真模型创建
有些人可能会想:什么叫做"DLL仿真模型之原理图符号"?我想学高级的C++创建DLL(动态链接库)仿真模型的方式,你别拦着我,不然,我可就人挡Kill人,佛挡Kill佛啦!原理图符 ...
- Java基准性能测试--JMH使用介绍
JMH是什么 JMH是Java Microbenchmark Harness的简称,一个针对Java做基准测试的工具,是由开发JVM的那群人开发的.想准确的对一段代码做基准性能测试并不容易,因为JVM ...
- MaterialDesignInXamlToolkit“无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容”异常的解决思路
前言: 最初是想解答园友"小代码大世界 "的问题,后来想举一反三,将这个问题简单剖析下,做到知其所以然. MaterialDesignInXAML 控件库高度封装,有一些控件在使用 ...
- UnityWebRequest使用总结
using System.Collections; using UnityEngine; using UnityEngine.Networking; /// <summary> /// 网 ...
- lms微服务的rpc通信框架
RPC的概念 RPC 全称 Remote Procedure Call--远程过程调用.是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明.简单的说,RPC就是从一台机器(客户端) ...
- Linux云计算-04_Linux用户及权限管理
Linux是一个多用户的操作系统,引入用户,可以更加方便管理Linux服务器,系统默认需要以一个用户的身份登录,而且在系统上启动进程也需要以一个用户身份器运行,用户可以限制某些进程对特定资源的权限控制 ...
- POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
我用的线段树写的. num数组表示已插入的数值的个数. 由于a[i]数值很大,但是n不是很大,所以要离散化处理 9 1 0 5 4 离散化后 4 1 0 3 2 这样保证最大值不会超过n #inclu ...
- 一千个不用 Null 的理由!
港真,Null 貌似在哪里都是个头疼的问题,比如 Java 里让人头疼的 NullPointerException,为了避免猝不及防的空指针异常,千百年来程序猿们不得不在代码里小心翼翼的各种 if 判 ...
- php-18个魔法函数
目录 php魔法函数 介绍 范例 1.__construct() 2.__destruct() 3.__call() 4.__callStatic 5.__get() 6.__set() 7.__is ...