|
Šī piemēra specifiskais lietojumprogrammu tirgus ir tāds, ka man regulāri jālasa preces cena no datu bāzes un pēc tam jāparāda tā tīmekļa lapā kā grafiks, līdzīgi kā akciju tirdzniecības instrumentu cenu tendenču diagramma. Es izmantoju asp.net, apvienojumā ar Highcharts spraudņa ieviešanu jQuery, spraudnis var atbalstīt daudzu veidu grafiku, taču tie ir statiski, un sniegtie piemēri ir jāpārveido, ieinteresētie draugi var doties uz Highcharts oficiālo vietni, lai redzētu (http://www.highcharts.com/), kas nodrošina daudz demonstrāciju, godīgi sakot, lai realizētu savas vajadzības, man vajadzētu izmantot Highstock, Tomēr, apskatot Highcharts dinamiskās atjaunināšanas piemēru, es varu arī saprast, ka mans prasību interfeiss ir kodolīgāks, tāpēc šajā rakstā tiek izmantots dinamiskās atjaunināšanas modelis Highcharts, un grafikas tips ir spline. Galīgā efekta karte ir šāda (Pinqijin cena tiek atjaunināta ik pēc 10 sekundēm, un punkts tiek pievienots līniju diagrammai ik pēc 10 sekundēm):
Sasniedziet soļu apkopošanu: Izveidojiet jaunu vietni ar VS un izveidojiet asp.net lapas DynamicUpdate.aspx, lapas kods ir šāds:
- <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicUpdate.aspx.cs"
- Inherits="WebImg.DynamicUpdate" %>
- <!DOCTYPE HTML>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>动态显示价格图例</title>
- <scrip去掉t type="text/javascrip去掉t" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></scrip去掉t>
- <scrip去掉t type="text/javascrip去掉t">
- $(function () {
- $(document).ready(function () {
- Highcharts.setOptions({
- global: {
- useUTC: false
- }
- });
- var chart;
- chart = new Highcharts.Chart({
- chart: {
- renderTo: 'container',
- type: 'spline',
- marginRight: 10,
- events: {
- load: function () {
- // set up the updating of the chart each second
- var series = this.series[0];
- setInterval(function () {
- var randomCode = parseInt(Math.random() * 10000);
- var oldrandomCode = parseInt(Math.random() * 10000);
- $.ajax({
- url: "ajaxhandler/dataupdate.ashx?" + randomCode + "=" + oldrandomCode + "&flag=1",
- type: "get",
- dataType: "json",
- success: function (data, textStatus, XMLHttpRequest) {
- var ctime = new Date();
- ctime.setTime(parseInt(data.rows[0].times));
- var x = ctime.getTime(), // current time
- y = data.rows[0].price * 200;
- series.addPoint([x, y], true, true);
- },
- error: function () { }
- });
- }, 10000);
- }
- }
- },
- title: {
- text: '品旗撮合交易市场品种行情'
- },
- xAxis: {
- title: {
- text: '时间'
- },
- type: 'datetime',
- tickPixelInterval: 150,
- labels:{formatter:function(){
- var vDate = new Date(this.value);
- return vDate.getHours()+":"+vDate.getMinutes()+":"+vDate.getSeconds();
- }}
- },
- yAxis: {
- title: {
- text: '价格'
- },
- plotLines: [{
- value: 0,
- width: 1,
- color: '#808080'
- }]
- },
- tooltip: {
- formatter: function () {
- return '<b>' + this.series.name + '</b><br/>' +
- Highcharts.dateFormat('%Y-%m-%d %H:%M:%S', this.x) + '<br/>' +
- Highcharts.numberFormat(this.y, 2);
- }
- },
- legend: {
- enabled: false
- },
- exporting: {
- enabled: false
- },
- credits:{
- text:'品旗金属交易市场',
- url:'http://www.inv6.com'
- },
- series: [{
- name: '品旗金(GOLD)',
- data: (function () {
- var data = [],
- i;
- var jsonData = <%= jsonstr %>;
- for (i = -19; i <= 0; i++) {
- var ctime = new Date();
- ctime.setTime(parseInt(jsonData.rows[i+19].time1));
- data.push({
- x: ctime.getTime(),
- y: jsonData.rows[i + 19].price * 200
- });
- }
- return data;
- })()
- }]
- });
- });
- });
- </scrip去掉t>
- </head>
- <body>
- <scrip去掉t src="http://code.highcharts.com/highcharts.js"></scrip去掉t>
- <scrip去掉t src="http://code.highcharts.com/modules/exporting.js"></scrip去掉t>
- <div id="container" style="min-width: 400px; height: 400px; margin: 0 auto">
- </div>
- </body>
- </html>
Kopēt koduHighcharts rekvizīts renderTo norāda displeja konteinerus, Notikumi ir notikums, kas konteineram ir jāreģistrē, kur ielāde nozīmē, ka tas notiek pēc ielādes pabeigšanas, šeit ielādē ir iestatīts js taimeris, kas notiek reizi 10 sekundēs, un tajā esošais kods ir pieprasīt jaunāko GOLD no mapes ajaxhandler faila dataupdate.ashx tajā pašā saknes direktorijā kā DynamicUpdate.aspx lapa, izmantojot ajax jQuery Šķirnes cenu dati, šeit ir iemesls, kāpēc es pievienoju randomCode + "=" + oldrandomCode ajax URL, jo nejauša skaitļa pievienošana var izvairīties no kešatmiņas, un flag=1 ir tāpēc, ka mans dataupdate.ashx fails vēlas pieņemt vairākus pieprasījumus no dažādiem ajax, tāpēc izmantojiet karodziņu, lai to atšķirtu xAxis attēlo konteinera x asij definēto atribūtu kolekciju, tips apzīmē parādīto teksta tipu, pēc izvēles, šeit es aizpildu laika tipu, šeit ņemiet vērā, ka noklusējums gadījumam ir GMT laiks, varat izmantot arī UTC laiku, bet mēs parasti izmantojam Pekinas laiku, (GMT vai UTC) + 8 stundas = Pekinas laiks, tāpēc, kad mēs izmantojam ajax, lai iegūtu laiku ir Pekinas laiks, mums vajadzētu atņemt 8 stundas no stundas (šeit es arī vēlos dalīties pieredzē, Kā konvertēt servera laiku uz js laiku, ko var izmantot ar .getTime() metodi, tas ir, atņemt servera laiku no 1970-1-1, pārvērst atlikušās dienas milisekundēs un pēc tam piešķirt vērtību jauninicializētajam laikam, izmantojot setTime metodi js, es atklāju, ka getTime() iegūtais rezultāts ir nepareizs, lai inicializētu js laiku tieši js jauna datuma veidā (gads, mēnesis, diena, stunda, minūte, sekunde, milisekunde) ar getTime(), Kas attiecas uz to, kāpēc 1970-1-1 tiek atņemts, tas ir tāpēc, ka getTime() metodes definīcija ir iegūt milisekunžu skaitu no pašreizējā laika no 1970-1-1), kad x ass netiek parādīta kā laiks vai jums tas ir jādefinē pats, to var definēt arī ar kategoriju atribūtu, tickPixelInterval attēlo x ass blīvumu, un etiķetes tiek izmantotas, lai formatētu x ass displeja formātu yAxis ir atribūtu kolekcija, kas definēta konteinera y asij, kas ir aptuveni tāda pati kā x ass atribūtiem, bet Highcharts nav iespējams definēt y ass fiksēto vērtību, izmantojot kategorijas, Highcharts y ass tiek automātiski ģenerēta, pamatojoties uz dotajiem koordinātu punkta datiem, kas ir atkarīgi no sērijas atribūta datu apakšatribūta, piemēram, piešķirot vērtību datiem Maksimālā vērtība ir 300, un minimālā vērtība ir 100. Tad y ass displejs būs no 100 līdz 300, vai arī varat iestatīt yAxis max vai min atribūtu sērija attēlo visu konteinerā parādīto līkņu kolekciju, šeit es parādu tikai vienu līkni, nosaukums apzīmē līknes nosaukumu, dati atspoguļo līknes koordinātu punktu sēriju, x ir priekšā, y ir aiz muguras, šajā gadījumā tas ir js masīvs, jo x ass parāda laiku, tāpēc masīva objekta x rekvizīts ir jāiestata uz laiku, bet Highcharts tas nav tieši piešķirts laiks x asij, Tā vietā milisekunžu skaits starp 1970-1-1 un noteiktu laiku tiek piešķirts x asij, lai attēlotu šo laiku, tāpēc jāizmanto getTime() metode, y ass koordinātu punkta formai jābūt y = mazam skaitlim * veselam skaitlim, un es nesapratu, kāpēc Highcharts tas bija jādara, jo šķirnes cenu dati šajā piemērā parasti ir aptuveni vienādi, tāpēc, iegūstot datus, man bija jādala ar 200 un pēc tam jāreizina ar 200, piešķirot vērtību y asij.
<%= jsonstr %> lapas kodā ir sākotnējie dati, kas man jāsaņem no servera, lai inicializētu grafiku, lapas CS ģenerēšanu
- public string jsonstr = "";
- protected void Page_Load(object sender, EventArgs e)
- {
- getData();
- }
- private void getData()
- {
- DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 20 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
- string json = "{"rows":[";
- for (int i = (dtPrice.Rows.Count-1); i >= 0; i--)
- {
- json += "{"time1":"" + (Convert.ToDateTime(dtPrice.Rows[i]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[i]["TMPPrice"])/200) + ""},";
- }
- json = json.TrimEnd(',');
- json += "]}";
- jsonstr = json;
- }
Kopēt koduStarp tiem TabMerPrice tabula ir šķirnes cenu informācijas tabula, TMPTime laiks, TMPPrice cena, TMPTime laika intervāls ir desmit sekundes, es izmantoju datu bāzes darbu, lai ģenerētu tabulas ierakstu, kas notiek reizi desmit sekundēs AddHours(-8) ir konvertēt laiku uz Pekinas laiku, un ģenerētais datu formāts ir json formāts Dataupdate.ashx kods izskatās šādi:
- public void ProcessRequest(HttpContext context)
- {
- string flag = context.Request.QueryString["flag"].ToString();
- switch (flag)
- {
- case "1"://获取品种当前价格
- GetMerPrice(context);
- break;
- }
- }
- private void GetMerPrice(HttpContext context)
- {
- context.Response.Clear();
- context.Response.Buffer = true;
- context.Response.ContentType = "application/json";
- context.Response.ContentEncoding.GetBytes("utf-8");
- DataTable dtPrice = SQLDBHelper.ExecuteTable("select top 1 TMPCode,TMPTime,TMPPrice from TabMerPrice with(nolock) order by TMPTime desc");
- string json = "{"rows":[";
- json += "{"times":"" + (Convert.ToDateTime(dtPrice.Rows[0]["TMPTime"]).AddHours(-8) - new DateTime(1970, 1, 1)).TotalMilliseconds + "","price":"" + (Convert.ToDecimal(dtPrice.Rows[0]["TMPPrice"]) / 200) + ""}";
- json = json.TrimEnd(',');
- json += "]}";
- context.Response.Write(json);
- context.Response.Flush();
- context.Response.End();
- }
Kopēt koduŠī ir aptuvena soļu apkopošanas ieviešana, kas var realizēt servera puses datu attēlošanu reāllaikā ar grafiku, kas līdzīgs krājuma formātam
HighCharts演示.zip
(48.69 KB, Lejupielādes skaits: 1)
|