使用Flot+AJAX绘制图表

     最近在搞一个软件外包比赛,现在还处于分析设计阶段,还没开始编码阶段,因为团队中我对asp.net编程是稍微熟一点的,所以我负责的模块的编程实现上是比较复杂的模块,这里要实现一个图表统计的功能,在开始之初,指导老师说使用报表来实现这个模块,但是自己感觉特别是报表自己想把它做得美观一点还是比较困难的,在网上发现使用flot来绘制折线图、饼形图还是比较好的选择,所以自己花了一些时间来研究一番.
对于flot的函数的说明
 $.plot(placeholder, data, options)
 placeholder:可以是JQuery的对象,DOM元素或者JQuery的表达示,要把完成的图放到这个位置上,要有该位置的高度和宽度,如:
使用选择器获取容器:$("# placeholder");
<div id="placeholder" style="width:600px;height:300px;"></div>
data:
data是data series的一个数组
其中一个单一序列的结构如下:
  {    
    color: color or number    
    data: rawdata    
    label: string    
    lines: specific lines options    
    bars: specific bars options    
    points: specific points options    
    xaxis: 1 or 2    
    yaxis: 1 or 2    
    clickable: boolean    
    hoverable: boolean    
    shadowSize: number    
  }    
一般指定它的data和Label
options:来设置图表的一些信息:如是否 显示线或者是否显示节点等
最后来介绍一下data的数据获取
使用ajax来获取数据:
前台代码:
 $(function() {
            var mydata = [];
            var options = {
                lines: { show: true },
                points: { show: true },
                xaxis: { tickDecimals: 0, tickSize: 1 }
            };
            var placeholder = $("#placeholder");
            $.plot(placeholder, mydata, options);
            $("#btn").click(function() {
                var button = $(this);
                $.post("shiyan.ashx", { "id": 2 }, function(data, status) {
                    if (status == "success") {
                        var adata = $.parseJSON(data);
                        for (var i = 0; i < adata.data.length - 1; i++) {
                         mydata.push([adata.data[i], adata.data[i + 1]]);
                            i++;
                        }
                      //  alert(mydata);
                        $.plot(placeholder,[mydata], options);
                    }
                    else
                    { alert("失败!"); }

                });
            });
        });
data的说明:data是一个二维数组:形式如:[[1991,1],[1992,3],[1994,6],[1995,7].....],当然它的数据类型是int型或者是double、float型,这里的获取的数据的思路是,先获取服务器传过来的数据然后在赋值给data[],后台传递数据使用JSON的数据格式实现JQuery和后台代码的数据交互,这里有个问题,是在后台代码序列化的是二维数组,但在JQuery反序列化后是一维的数组,(还请大家讨论),在反序列化数据以后有对数组进行了一次转换,转换成了二维数组,然后把参数传给$.plot(placeholder,[mydata], options),就可以绘制出相应的图形。另外flot的功能还很强大,这仅仅是flot的一小部分,在后来的遇到实际的问题时还会遇到一些问题,还会继续和大家探讨。
附:
下面是后台代码:
 
   
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Data;
using System.Collections;
using System.Text;
using Newtonsoft.Json;

namespace flot实验
{
// / <summary>
// / $codebehindclassname$ 的摘要说明
// / </summary>
[WebService(Namespace = " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo
= WsiProfiles.BasicProfile1_1)]
public class shiyan : IHttpHandler
{

public
void ProcessRequest(HttpContext context)
{
context.Response.ContentType
= " text/plain " ;
string action
= context.Request[ " id " ].ToString();
if (action == " 2 " )
{
JSON js
= new JSON();
js.data
= new int [ 4 , 2 ];
js.data[
0 , 0 ] = 1999 ; js.data[ 0 , 1 ] = 3 ; js.data[ 1 , 0 ] = 2000 ; js.data[ 1 , 1 ] = 5 ; js.data[ 2 , 0 ] = 2001 ; js.data[ 2 , 1 ] = 9 ; js.data[ 3 , 0 ] = 2002 ; js.data[ 3 , 1 ] = 10 ;
js.label
= " fhjksjk " ;
JavaScriptSerializer jss
= new JavaScriptSerializer();
context.Response.Write(jss.Serialize(js));
}
}

public bool IsReusable
{
get
{
return false ;
}
}
}
public class JSON
{
public
int [,] data;
public string label;

}
}

转载于:https://www.cnblogs.com/JerryWang1991/archive/2011/06/24/2089338.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值