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.pswp.cn/news/452155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452155.shtml
英文地址,請注明出處:http://en.pswp.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;我下載完成了這個文件之…