昨天花了一天的时间学习了一下highcharts。主要的内容差点儿相同都看了一遍,然后试着写了一个完整的demo,期间可谓百转千回。费了不少功夫。终于还是实现了我所想要的效果图,接下来我将怎样实现统计图的过程给大家说一下。

效果图例如以下:

虽然样子不是那么好看,但还是蛮有成就感的。

好了接下来我来说一下怎样实现。这里我先说下我实现的过程:首先。我通过前台发送ajax请求。请求后台进行查询,将查询结果先用dataTable保存,然后在转换成json对象。前台接受到后台返回的结果json对象,然后进行json数组的构建,构建完毕后,然后将构建的字符串“似json数组”(注意这里并不是是真正的json数组。实际为字符串,这里我叫它“似json数组”,也能够觉得js数组),最后通过JSON.parse()函数进行字符串转json数组。

先看一下我的前台代码:

js代码段:

        $(function() {

            $.ajax(
{
type: "GET",
url: "../RequestHandler.aspx?_rtype=ajax&_class=RM.Webapp.Org.Map&_method=staticsPopulation&parentOrg=33708000000000000&niandu=2015",
// dataType: "json",//有无都不起作用
error: function() {
alert("aaa");
},
//返回的response是一个json对象,可是此时的json对象并非我们所要的格式,我们须要的是json数组格式。
success: function(response) { //st必须先进行定义,否则会在st前边出现undefined。
var x = "";
var y = "";
var str = "";
var responsestr = "";
var region = "";
var regionStr = "";
//构造data格式[[x1,y1],[x2,y2]...],特别注意的是这里构造完的是字符串
for (var i = 0; i < response.length; i++) {
responsestr = "[" + "\"" + response[i].regionFullName + "\"" + "," + response[i].population;
//构建xAxis中categories['x1','x2','x3'...]
region = region + "\"" + response[i].regionFullName + "\"";
if (i < response.length - 1) {
responsestr = responsestr + "],";
region = region + ",";
}
else {
responsestr = responsestr + "]"; }
str = str + responsestr; }
responsestr = "[" + str + "]";
regionStr = "[" + region + "]";
//将字符串转换成json数组格式,直接序列化。然后将此序列化的值赋给series中的data
var x = JSON.parse(responsestr);
//将字符串转换成json数组格式,。
var y = JSON.parse(regionStr);
$("#show").highcharts({
chart: {
type: 'column',
style: {
fontSize: '18px',
fontWeight: 'bold',
color: 'blue'
}
},
title: {
text: '济宁市各县市区人口数统计图'
},
subtitle: {
text: '2015年'
},
xAxis: {
title: '行政区',
// categories:['任城区','曲阜市']
categories: y,
gridLineWidth: 1//设置x轴上的垂线
},
yAxis: {
title: '人口数',
gridLineDashStyle: 'dash', //y轴默认gridLineWidth:1。这里设置y轴垂线的样式
// labels: {
// step:2//这段代码是设置y轴在原有刻度的前提下每隔两个格显示一下label值,该值小数无效,取整
// }
plotLines: [{
color: "red", //官网上是单引號,双引號也是能够的
dashStyle: 'solid',
value: 30,
width: 3}]
}, series: [{
name: '人数', data: x}],
credits: {
enabled: false
}
});
} }); });

html代码段:

<body>
<div id="show">
</div>
</body>

请求部分:

 type: "GET",
url: "../RequestHandler.aspx?_rtype=ajax&_class=RM.Webapp.Org.Map&_method=staticsPopulation&parentOrg=33708000000000000&niandu=2015",

这段请求目的是为了一ajax方式进行向后台发送请求到method=staticsPopulaiton函数中。并传递两个參数给后台,至于RequestHandler.aspx中的内容我就不多说了大家能够自己百度一下怎样请求。

构建highcharts图形代码:

$("#show").highcharts({
chart: {
type: 'column',
style: {
fontSize: '18px',
fontWeight: 'bold',
color: 'blue'
}
},
title: {
text: '济宁市各县市区人口数统计图'
},
subtitle: {
text: '2015年'
},
xAxis: {
title: '行政区',
// categories:['任城区','曲阜市']
categories: y,
gridLineWidth: 1//设置x轴上的垂线
},
yAxis: {
title: '人口数',
gridLineDashStyle: 'dash', //y轴默认gridLineWidth:1,这里设置y轴垂线的样式
// labels: {
// step:2//这段代码是设置y轴在原有刻度的前提下每隔两个格显示一下label值,该值小数无效,取整
// }
plotLines: [{
color: "red", //官网上是单引號。双引號也是能够的
dashStyle: 'solid',
value: 30,
width: 3}]
}, series: [{
name: '人数', data: x}],
credits: {
enabled: false
}
});

在里面我已经做了备注。有疑问的查看一下api就能够了,这里我想着重说明json数据传递给前台。怎样实现highcharts图形。前台我们已经准备好了,接下来就看一下后台的实现。

后台实现代码:

 #region 变量说明

            ////用于查询
String commandText, retMsg;
Boolean execRight;
//用于保存从查询字符串获取的信息
String parentOrg="";
Int32 year;
//String fileName = "";
//String content;
//String commandText = "";
DataTable dataTable = new DataTable();
// String fileContent = "";
#endregion #region 先对传递过来的数据进行编码
page.Request.ContentEncoding = System.Text.Encoding.UTF8;
#endregion
parentOrg = page.Request.Params["parentOrg"];
year = Convert.ToInt32(page.Request.Params["niandu"]);
commandText = "use organization select population ,regionFullName from regionXian where parentOrg='{0}' and year={1}";
commandText = string.Format(commandText, parentOrg, year);
dataTable = dataEngine.Select(commandText, out execRight, out retMsg); //声明JavaScript序列化对象
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
// 定义一个list<Dictionary>类型的数组,该数组用于记录Dictionary类型的键值对.string类型记录列名,object类型记录每行中各列值
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
//创建一行的每列键值对对象
Dictionary<string, object> row;
foreach (DataRow dr in dataTable.Rows)
{
row = new Dictionary<string, object>(); foreach (DataColumn dc in dataTable.Columns)
{
row.Add(dc.ColumnName, dr[dc]);
}
rows.Add(row); }
page.Response.ContentType = "application/json";
page.Response.ContentEncoding = System.Text.Encoding.UTF8;
page.Response.Write(serializer.Serialize(rows));
page.Response.End();

查询的过程我就不多说了,这里我仅仅是将查询写成了一个DataEngine数据引擎类。将查询结果保存到DataTable中,然后转换成json对象,在c#中。有专门的序列化javascript对象(json也属于JavaScript。因此这里也能够特指json对象)System.Web.Script.Serialization.JavaScriptSerializer,由于我们知道json对象是key/value对出现的。因此我们要构建这种一个json对象,Dictionary类就是创建key/value对,来构造json对象(属性名:值)。通过两个for循环便能够实现全部行的全部列key/value
json对象的实现,然后返回给前台。这里须要说明两天返回的类型和返回的编码要注意一下。

多说一点key:是字符串,value:可能是数值也可能是字符串。因此这里设置成了object类型。

注:

   page.Response.ContentType = "application/json";

这段代码很重要,由于我们serializer.Serialize(rows)

后是将List对象转换成了字符串,这里是json字符串,假设我们类型改成plain或者其他,将会在前台出现错误。由于我们传递过去response是一个对象。远在是我们调用了它的属性。

所以应该是一个json对象,假设不是这个类型,将会传递一个json字符串。

设置断点看一下response类型:

好了后台我们就完毕了。接下来便是我们前台怎样接受这些从后台传递过来的json对象了。

我们都知道ajax中有一个叫callback的函数。也就是说我们请求完了须要返回处理。

通过highcharts 官网我们能够知道,构建图形的数据主要存储到series中的data中,data的定义方式例如以下:

这里我在最初的代码中使用了另外一种方式。也就是说。我构建的是[[,],[,]..]这样的类型的data(实际上我这里仅仅须要构建y值就能够了,用第一种data方式,构建方法如构建categories)。可是光构建这个还远远不够。由于你会发现教程中也说了,x轴会以自增的方式显示。从0開始。显示效果图例如以下:

这并非我们想要的效果图,我们须要的是x轴有我们自己传递过来的数据。

通过查看api,我们发现样例都是通过单独构建x轴来实现的,因此我们能够构建js数组categories来实现x轴坐标。构建data和categories代码例如以下:

//st必须先进行定义,否则会在st前边出现undefined。
var x = "";
var y = "";
var str = "";
var responsestr = "";
var region = "";
var regionStr = "";
//构造data格式[[x1,y1],[x2,y2]...],特别注意的是这里构造完的是字符串
for (var i = 0; i < response.length; i++) {
responsestr = "[" + "\"" + response[i].regionFullName + "\"" + "," + response[i].population;
//构建xAxis中categories['x1','x2','x3'...]
region = region + "\"" + response[i].regionFullName + "\"";
if (i < response.length - 1) {
responsestr = responsestr + "],";
region = region + ",";
}
else {
responsestr = responsestr + "]"; }
str = str + responsestr; }
responsestr = "[" + str + "]";
regionStr = "[" + region + "]";
//将字符串转换成json数组格式。直接序列化。 然后将此序列化的值赋给series中的data
var x = JSON.parse(responsestr);
//将字符串转换成json数组格式,。 var y = JSON.parse(regionStr);

这样便实现了我们想要的效果图。

-----网此文能帮助到你

共享万岁。!!

highCharts怎样实现json数组数据的图形展示的更多相关文章

  1. Android-Gson解析JSON数据(JSON对象/JSON数组)

    上一篇博客,Android-解析JSON数据(JSON对象/JSON数组),介绍了使用 org.json.JSONArray;/org.json.JSONObject; 来解析JSON数据: Goog ...

  2. js读取解析JSON类型数据(转)

    谢谢博主,转自http://blog.csdn.net/beyond0851/article/details/9285771 一.什么是JSON? JSON(JavaScript Object Not ...

  3. Js前端传递json数组至服务器端并解析的实现。

    最近做的一个小项目中需要将json数组数据传递到服务器端进行保存,现分享一下解决思路. 环境:EasyUi+Mvc 4.0 如下: 在上述截图中的红色圈起来的部分,需要在点击保存后通过一次ajax请求 ...

  4. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

  5. 前端Json 增加,删除,修改元素(包含json数组处理)

    一:基础JSON对象  二:JSON数组数据 以下为增删修改方法: <!DOCTYPE html> <html lang="en"> <head> ...

  6. Springboot+ajax传输json数组以及单条数据的方法

    Springboot+ajax传输json数组以及单条数据的方法 下面是用ajax传输到后台单条以及多条数据的解析的Demo: 结构图如下: 下面是相关的代码: pom.xml: <?xml v ...

  7. Android-解析JSON数据(JSON对象/JSON数组)

    在上一篇博客中,Android-封装JSON数据(JSON对象/JSON数组),讲解到Android真实开发中更多的是去解析JSON数据(JSON对象/JSON数组) 封装JSON的数据是在服务器端进 ...

  8. Android-封装JSON数据(JSON对象/JSON数组)

    Android-封装JSON数据(JSON对象/JSON数组),一般情况下不会在Android端封装JSON的数据,因为封装JSON的数据是在服务器端进行封装了,Android更多的工作是解析(JSO ...

  9. 毕设三: spark与phoenix集成插入数据/解析json数组

    需求:将前些日子采集的评论存储到hbase中 思路: 先用fastjson解析评论,然后构造rdd,最后使用spark与phoenix交互,把数据存储到hbase中 部分数据: [ { "r ...

随机推荐

  1. php5.3+ 安装(mysqlnd )

    摘自:http://blog.csdn.net/dragon8299/article/details/6273295 如何安装mysqlnd LINUX环境中,默认情况下,php中的mysql扩展还是 ...

  2. 解决svn 异常:svn: E155027: Tree conflict can only be resolved to working state; {0} not resolved

    以前很少使用svn进行代码管理,时间长了之后也忘得差不多了,但现在公司使用的是svn进行版本管理,使用过程中出现了问题,顺带记一下. 异常情况:切换svn地址之后,发现项目代码无法合并代码,也无法提交 ...

  3. hdu 5125(LIS变形)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5125 题解: 这个题dp[i][0],dp[i][1]数组分别记录在第i个位置取a[i]和b[i]时 ...

  4. ECMAScript和JavaScript的关系

    JavaScript 是一种基于 ECMAScript 规范的脚本语言,并在此基础上进行了自己的封装.ECMAScript 不是一种编程语言,仅仅是一种脚本语言规范,由欧洲计算机协会制定和发布,任何基 ...

  5. 部署站点支持Https访问的方法

    1.申请公钥和私钥,放到服务器 2.编辑default配置文件 改为 加上证书路径 ps:泛域名支持admin.xxx.com.demo.xxx.com等等,而免费的Let's Encrypt仅支持w ...

  6. AC日记——The Meeting Place Cannot Be Changed codeforces 780b

    780B - The Meeting Place Cannot Be Changed 思路: 二分答案: 代码: #include <cstdio> #include <cstrin ...

  7. laravel 安装碰到的问题:全局安装 Laravel Installer,然后用下面的指令创建新项目: laravel new blog报连接超时解决方案

    在执行laravel new project 的时候报错 cURL error 7: Failed to connect to cabinet.laravel.com port 80: Timed o ...

  8. Xcode_9_beta.xip 更新下载

    Xcode_9_beta.xip 更新下载 Xcode_9_beta.xip 链接: pan.baidu.com/s/1dFJ33tJ 密码: 89mv

  9. Moving Average from Data Stream -- LeetCode

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  10. bzoj 4338: BJOI2015 糖果

    4338: BJOI2015 糖果 Time Limit: 2 Sec  Memory Limit: 256 MBSubmit: 200  Solved: 93[Submit][Status][Dis ...