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

下面就为您详细讲解“jQuery getJSON()+.ashx实现分页(改进版)”的攻略。

一、准备工作

1.创建基础网页

首先,您需要创建一个基础网页,html部分如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery getJSON()+.ashx 实现分页(改进版)</title>
    <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
    <table id="table"></table>
    <div id="pageBar"></div>
</body>
</html>

其中,我们引入了jQuery库,并设置了一个表格和一个分页的div,这将在后续中用到。

2.创建服务器端处理程序(.ashx)

创建服务器端处理程序(.ashx)时需要注意以下几点:

1.需继承 IHttpHandler 接口

2.需实现方法:void ProcessRequest(HttpContext context)

3.需设置编码格式为 UTF-8

4.需输出 JSON 数据格式

下面是一个示例 Handler.ashx 文件:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;
using System.Text;

public class Handler : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        context.Response.Charset = "utf-8";

        int page = Convert.ToInt32(context.Request.QueryString["page"]);
        int pageSize = 5;
        int total = 0;
        List<Dictionary<string, string>> dataList = new List<Dictionary<string, string>>();
        string constr = "your_connection_string";
        string cmd = string.Format("EXEC my_procedure {0}, {1}, '{2}'", page, pageSize, "your_condition");
        using(SqlConnection con = new SqlConnection(constr)) {
            con.Open();
            SqlCommand command = new SqlCommand(cmd, con);
            SqlDataReader dataReader = command.ExecuteReader();
            while(dataReader.Read()) {
                Dictionary<string, string> item = new Dictionary<string, string>();
                item.Add("id", dataReader["id"].ToString());
                item.Add("name", dataReader["name"].ToString());
                dataList.Add(item);
            }
            dataReader.Close();
            con.Close();
        }
        string countCmd = string.Format("SELECT COUNT(*) FROM your_table WHERE {0}", "your_condition");
        using(SqlConnection con = new SqlConnection(constr)) {
            con.Open();
            SqlCommand command = new SqlCommand(countCmd, con);
            total = Convert.ToInt32(command.ExecuteScalar());
            con.Close();
        }
        var data = new { code = 0, msg = "", count = total, data = dataList };
        JavaScriptSerializer jss = new JavaScriptSerializer();
        string jsonData = jss.Serialize(data);
        context.Response.Write(jsonData);
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}

二、实现分页

下面是实现分页的详细步骤:

1.定义全局变量

在 js 部分定义如下变量:

var pageSize = 5; // 每页显示条数
var pageIndex = 1; // 当前页码
var total = 0; // 数据总条数

2.绑定数据

编写一个 loadTableData() 方法,用以获取和绑定数据:

function loadTableData() {
    $.getJSON("Handler.ashx", { page: pageIndex }, function(data) {
        if(data.code === 0) {
            total = data.count;
            var dataList = data.data;
            var html = "";
            for(var i = 0; i < dataList.length; i++) {
                html += "<tr><td>" + dataList[i].id + "</td><td>" + dataList[i].name + "</td></tr>";
            }
            $("#table").html(html);
        }
    });
}

这里我们使用了jQuery的 getJSON() 方法获取服务器端返回的JSON数据,并通过一个循环将数据绑定到表格中。其中传入的参数为 { page: pageIndex } ,它表示请求的页码,这将在后续中用到。

3.渲染分页组件

编写一个 renderPageBar() 方法,用以渲染分页组件:

function renderPageBar() {
    var totalPage = Math.ceil(total / pageSize);
    var pageNum = (totalPage >= 9 && pageIndex > 4) ? 9 : totalPage;
    var pageStart = pageIndex > 4 ? pageIndex - 4 : 1;
    var pageEnd = pageStart + pageNum - 1;
    pageEnd = pageEnd > totalPage ? totalPage : pageEnd;
    var html = "<a href=\"javascript:void(0);\" class=\"btn-page\" data-pageno=\"" + 1 + "\">首页</a>";
    if(pageIndex > 1) {
        html += "<a href=\"javascript:void(0);\" class=\"btn-page prev-page\" data-pageno=\"" + (pageIndex - 1) + "\">上一页</a>";
    }
    for(var i = pageStart; i <= pageEnd; i++) {
        html += "<a href=\"javascript:void(0);\" class=\"btn-page " + (i == pageIndex ? "active" : "") + "\" data-pageno=\"" + i + "\">" + i + "</a>";
    }
    if(pageIndex < totalPage) {
        html += "<a href=\"javascript:void(0);\" class=\"btn-page next-page\" data-pageno=\"" + (pageIndex + 1) + "\">下一页</a>";
    }
    html += "<a href=\"javascript:void(0);\" class=\"btn-page\" data-pageno=\"" + totalPage + "\">尾页</a>";
    $("#pageBar").html(html);
}

这里通过计算得出总页数以及当前分页组件应显示的页码,然后生成 HTML 代码并通过 jQuery 将其渲染到页面上。其中,通过操作 data-pageno 属性存储页码信息,以方便后续的事件处理。

4.绑定分页组件事件

编写一个 bindPageEvents() 方法,用以绑定分页组件事件:

function bindPageEvents() {
    $("#pageBar").on("click", ".btn-page", function() {
        var pageno = $(this).data("pageno");
        if(pageno) {
            pageIndex = pageno;
            loadTableData();
            renderPageBar();
        }
    });
}

这里我们使用jQuery的事件委托机制,在上一步渲染分页组件时,为所有按钮绑定点击事件,并在事件中获取并更新当前页码,然后重新绑定数据和重新渲染分页组件。

5.初始化分页组件

完成以上步骤后,在 $(document).ready() 方法中初始化:

$(document).ready(function() {
    loadTableData();
    renderPageBar();
    bindPageEvents();
});

三、示例说明

下面给出两个示例说明,以帮助您更容易地理解上述步骤。

示例一:分页组件的样式修改

我们可以将示例中的分页组件样式通过 CSS 进行修改,以适应您的项目需要。例如,我们可以将分页组件的字体颜色改为红色:

#pageBar {
    margin-top: 20px;
    text-align: center;
}
.btn-page {
    display: inline-block;
    margin-right: 10px;
    padding: 5px 10px;
    border: 1px solid #ccc;
    border-radius: 3px;
    color: red;
    cursor: pointer;
}
.btn-page:hover, .btn-page.active {
    background: #f60;
    color: #fff;
    border-color: #f60;
}

示例二:使用自定义参数进行查询

我们可以在 Handler.ashx 文件中,将接收到的 page 参数转换成自定义的查询参数,这样就可以根据不同的参数查询不同的数据。例如,我们可以新增一个 key 参数,用以指定查询的关键字:

string key = HttpUtility.UrlDecode(context.Request.QueryString["key"]).Trim();
string cmd = string.Format("EXEC my_procedure {0}, {1}, '{2}'", page, pageSize, key);
string countCmd = string.Format("SELECT COUNT(*) FROM your_table WHERE Name LIKE '%{0}%' AND {1}", key, "your_condition");

在实现这个需求时,您可能还需要在前端部分编写一个查询框,并将查询框的值传递至服务器端。这部分内容较为繁琐,就不再赘述。

这就是对“jQuery getJSON()+.ashx 实现分页(改进版)”攻略的详细讲解,希望能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:jQuery getJSON()+.ashx 实现分页(改进版) - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 教你用js截取字符串开头、结尾及两字符串之间的内容

    教你用JS截取字符串开头、结尾及两字符串之间的内容 在JS中,截取字符串是非常常见的一个操作,本文将为大家介绍如何用JS截取字符串的操作,并提供两个示例。 一、截取字符串的基本用法 JS提供了substr和slice两种方法来截取字符串,不同的是它们的参数使用方式不同。 1. substr 它接受两个参数,第一个参数是开始截取的位置,第二个参数是截取的长度。…

    JavaScript 2023年5月28日
    00
  • JS清除IE浏览器缓存的方法

    下面是详细讲解“JS清除IE浏览器缓存的方法”的完整攻略。 1. 缓存介绍 在浏览器中,网页会被缓存到本地,从而提高网页的加载速度。但是,如果网页文件被更新了,但是浏览器本地缓存还是老的,就会让用户看到旧的网页。因此,我们需要清除IE浏览器缓存,让用户能够看到最新的网页内容。 2. 清除缓存的方法 下面是清除IE浏览器缓存的方法。 2.1 使用meta标签禁…

    JavaScript 2023年6月11日
    00
  • JavaScript框架设计模式详解

    JavaScript 框架设计模式是指在各种 JavaScript 应用和框架中使用的一种处理问题和实现功能的设计方法。下面详细讲解一下这种设计模式的完整攻略。 1. 了解模块化设计 JavaScript 应用程序的模块化设计允许开发人员将整个系统分解成逻辑上相关的不同模块。这使得代码更加整洁和可维护,并允许代码重复使用。 2. 使用设计模式 在 JavaS…

    JavaScript 2023年6月10日
    00
  • 一文搞懂如何避免JavaScript内存泄漏

    一文搞懂如何避免JavaScript内存泄漏 什么是JavaScript内存泄漏 JavaScript 内存泄漏 ( memory leak ) 指在程序中因为疏忽或错误,导致已经不再需要使用的垃圾对象一直被占用,无法被及时回收释放。这将一直占用着计算机的内存资源,降低程序运行效率。 JavaScript内存泄漏的原因 JavaScript 内存泄漏产生的原…

    JavaScript 2023年6月10日
    00
  • Area 区域实现post提交数据的js写法

    Area 区域是HTML表单元素的一种。它允许在一个可编辑的区域内输入文本或代码。使用JavaScript,我们可以使用它来实现提交数据的功能,这些数据可以使用POST方法发送到服务器。 以下是实现Area 区域Post提交数据的基本步骤: 创建一个表单元素,其中包含一个Area 区域,指定一个ID用于JavaScript操作。 <form> &…

    JavaScript 2023年6月11日
    00
  • 深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解

    深入Javascript函数、递归与闭包是Javascript重要概念之一,理解这些概念可以帮助我们编写更加高效、优美的代码。 执行环境(Execution Context) 在Javascript中,当代码执行时,在内存中会依次创建执行上下文,也就是执行环境(Execution Context)。一个执行环境包含三个重要的属性: 变量对象(Variable…

    JavaScript 2023年6月10日
    00
  • 判断某个字符在一个字符串中是否存在的js代码

    判断某个字符在一个字符串中是否存在通常使用JavaScript内置的indexOf()方法。该方法返回要查找的字符第一次出现的索引位置。当要查找的字符不在字符串中时,该方法返回-1。 以下是示例代码: const str = ‘This is a sample string’; const char = ‘a’; if (str.indexOf(char) …

    JavaScript 2023年5月28日
    00
  • JS实现日期时间动态显示的方法

    实现日期时间动态显示的方法可以使用JavaScript代码来实现,JavaScript 提供了一些可以使用的函数和对象,我们可以通过这些函数和对象来完成这一过程。 步骤一:获取日期时间对象 在JavaScript中获取日期时间对象可以使用内置对象 Date 。Date 对象同时包含了日期和时间,可以通过这个对象获取当前的日期时间。 var now = new…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部