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

yizhihongxing

下面就为您详细讲解“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日

相关文章

  • Javascript prototype 属性

    以下是关于JavaScript prototype属性的完整攻略。 JavaScript prototype属性 JavaScript prototype属性是每个函数都有的一个属性,它指向一个对象,这个对象包含了该函数的实例共享的属性和方法。我们可以使用prototype属性来添加新的属性和方法,从而现代码的复用。 下面是一个使用prototype的示例:…

    JavaScript 2023年5月11日
    00
  • js中yield参数应用示例深入理解

    我来详细讲解一下“js中yield参数应用示例深入理解”的攻略。 标题一:yield的概念 yield的定义 在JavaScript中,yield是ES6(ECMAScript 6)中的一种关键字,用于生成器函数中。通过yield,我们可以在生成器函数中暂停执行并返回一个迭代器对象给调用者,再次调用时可以从上一次暂停的地方继续执行。 yield的应用场景 协…

    JavaScript 2023年5月28日
    00
  • JavaScript基础学习之splice()函数详解

    JavaScript基础学习之splice()函数详解 在JavaScript中,splice()是一个常用的数组方法。本文将详细讲解splice()函数的定义、用法、参数以及示例说明,帮助初学者更好地理解和掌握这个函数。 splice()函数定义 splice()函数是JavaScript中的一个数组方法,用于修改数组的内容。它可以实现添加、删除和替换数组…

    JavaScript 2023年5月27日
    00
  • 经常用到的javascript验证函数收集第1/3页

    下面我将详细讲解“经常用到的javascript验证函数收集第1/3页”的完整攻略。 1. 收集目的 本文的目的是收集JavaScript中常用的验证函数,便于开发者在项目中进行数据验证。 2. 收集内容 本文收集了JavaScript中常用的验证函数,包括表单验证、数字验证、邮箱验证、手机号码验证等。下面分别进行介绍: 2.1 表单验证 表单验证是Web开…

    JavaScript 2023年5月27日
    00
  • 微信小程序实现圆心进度条

    接下来我将为大家详细讲解“微信小程序实现圆心进度条”的完整攻略。该攻略分为以下几个步骤: 步骤一:创建页面 在微信小程序开发者工具中创建一个页面,并在页面中引入canvas组件,用于绘制圆心进度条。 <!– 页面 wxml 代码 –> <canvas canvas-id="canvas1" style="w…

    JavaScript 2023年6月11日
    00
  • java stringbuffer的用法示例

    让我来详细讲解一下Java StringBuffer的用法示例。 什么是StringBuffer 在开始讲解示例之前,我们先来了解一下什么是StringBuffer。 StringBuffer 是一个字符串缓冲区,它可以动态地增加和减少字符串的长度。相比于String类,StringBuffer 类拥有更多的方法来查找、删除和替换字符。而且在处理大量数据时,…

    JavaScript 2023年5月28日
    00
  • JavaScript高级程序设计 错误处理与调试学习笔记

    下面我将详细讲解“JavaScript高级程序设计 错误处理与调试学习笔记”的完整攻略。 1. 学习目标 学习本篇笔记的目标是了解JavaScript中的错误处理和调试技术。具体包括以下方面: 理解JavaScript中的错误类型; 掌握JavaScript中的错误处理机制; 掌握JavaScript中的调试技术。 2. 错误类型及处理机制 在JavaScr…

    JavaScript 2023年5月27日
    00
  • 浅谈下拉菜单中的Option对象

    下拉菜单是Web界面设计中常用的界面元素之一,Option对象是下拉菜单中的选项对象。要想了解Option对象,需要从以下几个方面来讲解: 1. Option对象的定义 Option对象是HTML下拉列表(select)元素中的一个选项对象,每个选项对象都有以下属性和方法: <option value="option_value" …

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