• 技术文章 >web前端 >js教程

    jQuery getJSON()+.ashx 实现分页(改进版)_jquery

    2016-05-16 17:38:58原创725
    参考了:http://www.jb51.net/article/35110.htm
    改进的地方:
    1、ashx返回json数据,减少传输数据量,html页面样式控制也比较灵活;
    2、改写html页的jQuery代码;
    3、把3个ashx文件简化为1个。
    一、创建表的测试数据
    复制代码 代码如下:

    create table test(id int identity,title varchar(36))
    declare @index int;
    set @index = 1;
    while(@index < 8888)
    begin
    insert test(title) values (newid())
    set @index = @index + 1
    end

    二、.html页
    复制代码 代码如下:



















    三、.ashx页
    复制代码 代码如下:

    public class Handler : IHttpHandler
    {
    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType = "text/plain";
    StringBuilder tb = new StringBuilder();
    DataBase db = new DataBase();
    int pageSize = 10;
    int pageIndex = 0;
    string type = context.Request.Params["type"];
    switch (type)
    {
    case "first":
    DataTable dt1 = db.GetDataSet("select top 10 * from test", null).Tables[0];
    tb.Append(Common.DataTableToJSON(dt1, true)); //DataTable转为JSON
    break;
    case "next":
    pageIndex = Convert.ToInt32(context.Request.Params["index"]);
    DataTable dt2 = db.GetDataSet("select top " + pageSize.ToString() + " * from test where id> (select max(id) from (select top " + (pageSize * pageIndex).ToString() + " id from test) t)", null).Tables[0];
    tb.Append(Common.DataTableToJSON(dt2, true));
    break;
    case "pre":
    pageIndex = Convert.ToInt32(context.Request.Params["index"]);
    DataTable dt3 = db.GetDataSet("select top " + pageSize.ToString() + " * from test where id> (select max(id) from (select top " + (pageSize * pageIndex).ToString() + " id from test) t)", null).Tables[0];
    tb.Append(JSONHelper.DataTableToJSON(dt));
    break;
    }
    context.Response.Write(tb.ToString());
    }
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }

    四、效果

    --------------------------------------------------------------------------------------------------------------------
    备注 (2010-7-10):
    用sql2005 row_number()分页方法,.ashx页面代码可简化为
    复制代码 代码如下:

    public class Handler : IHttpHandler
    {
    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType = "text/plain";
    DataBase db = new DataBase();
    int pageSize = 10;
    int pageIndex = 0;
    int.TryParse(context.Request.Params["index"], out pageIndex);
    string type = context.Request.Params["type"];
    string sql = string.Format("select * from ( select row_number() over (order by id) as rowNum,* from test) as t "
    + " where rowNum>{0} and rowNum<={1}", pageIndex * pageSize, (pageIndex+1) * pageSize);
    DataTable dt = db.GetDataSet(sql, null).Tables[0];
    context.Response.Write(JSONHelper.DataTableToJSON(dt));
    }
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }

    备注
    其中JSONHelper.DataTableToJSON(dt)方法为DataTable解析成JSON,见另一篇文章JSONHelper帮助类
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:getJSON ashx 分页
    上一篇:JavaScript 处理Iframe自适应高度(同或不同域名下)_javascript技巧 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Ng DevUI 14.1.0版本已发布,看看有哪些新特性吧!• IDEA中怎么配置安装node.js?方法浅析• 聊聊Node中怎么用async函数• react 怎么实现按需加载• 浅析Angular中怎么结合使用FormArray和模态框
    1/1

    PHP中文网