+Ajax+JQuey+Json数据+存储过程实现无刷新分页

时间:2025-03-17 07:57:19
<!--引入jquery-1.6.2-->
<!--页面-->
<script src="../Jquery/jquery-1.6." type="text/javascript"></script>

<!--引入jquery-1.6.2-->
    <script type="text/javascript" language="javascript">
    var pageIndex=1; //当前页码
    var totalPage; //总页数
    $(function () {
        $.ajax({
            url: "", //请求页面
            dataType: "json",         //返回的数据类型为json
            data: { pagesize: 3, pageindex: pageIndex }, //向url那个页面传两个参数
            success: function (getdata, stext) {
                for (var i = 0; i < ; i++) {
                    $("<tr><td>" + [i].isbn + "</td><td>" + [i].id + "</td><td>" + [i].unitprice + "</td><td>" + [i].title + "</td></tr>").appendTo($("table"));
                    totalPage = ();
                }
            },
            error: function (xmlhttprequest, st, e) {
                alert("Error:" + e); //打印错误消息
            }
        });

        //下一页
        $("[value=下一页]").click(function () {
            pageIndex++;
            if (pageIndex >= totalPage) {
                pageIndex = totalPage;    //如果当前页码大于等于总页数,当前页码就等于总页数
                $(this).attr("disabled", true); //下一页不可点击(this代表当前点击的按钮)
            } else {
                $(this).attr("disabled", false); //否则下一页可点击(this代表当前点击的按钮)
            }

            if (pageIndex <= 1) {
                pageIndex = 1; //如果当前页码小于等于1,则当前页码为第一页
                $("[value=上一页]").attr("disabled", true); //上一页不可点击
            } else {
                $("[value=上一页]").attr("disabled", false); //上一页可点击
            }
             //重新绑定数据
            $.ajax({
                url: "",   //请求页面
                dataType: "json",       //返回的数据类型为json
                data: { pagesize: 3, pageindex: pageIndex },  //向url那个页面传两个参数
                success: function (getdata, stext) {
                    //每次点击下一页的时候都要清空当前页的数据
                    $("table tr:gt(0)").remove();
                    for (var i = 0; i < ; i++) {
                        $("<tr><td>" + [i].isbn + "</td><td>" + [i].id + "</td><td>" + [i].unitprice + "</td><td>" + [i].title + "</td></tr>").appendTo($("table"));
                        totalPage = ();
                    }
                },
                error: function (xmlhttprequest, st, e) {
                    alert("Error:" + e); //打印错误消息
                }
            });
        });

        //上一页
        $("[value=上一页]").click(function () {
            pageIndex--;
            if (pageIndex >= totalPage) {
                pageIndex = totalPage;    //如果当前页码大于等于总页数,当前页码就等于总页数
                $(this).attr("disabled", true); //下一页不可点击(this代表当前点击的按钮)
            } else {
                $(this).attr("disabled", false); //否则下一页可点击(this代表当前点击的按钮)
            }

            if (pageIndex <= 1) {
                pageIndex = 1; //如果当前页码小于等于1,则当前页码为第一页
                $("[value=上一页]").attr("disabled", true); //上一页不可点击
            } else {
                $("[value=上一页]").attr("disabled", false); //上一页可点击
            }
            //重新绑定数据
            $.ajax({
                url: "",    //请求页面
                dataType: "json",    //返回的数据类型为json
                data: { pagesize: 3, pageindex: pageIndex }, //向url那个页面传两个参数
                success: function (getdata, stext) {
                    //每次点击上一页的时候都要清空当前页的数据
                    $("table tr:gt(0)").remove();
                    for (var i = 0; i < ; i++) {
                        $("<tr><td>" + [i].isbn + "</td><td>" + [i].id + "</td><td>" + [i].unitprice + "</td><td>" + [i].title + "</td></tr>").appendTo($("table"));
                        totalPage = ();
                    }
                },
                error: function (xmlhttprequest, st, e) {
                    alert("Error:" + e); //打印错误消息
                }
            });
        });

    });
    </script>

<body>
    <form  runat="server">
    <div>
        <table>
            <tr>
                <th>封面</th>
                <th>编号</th>
                <th>价格</th>
                <th>标题</th>
            </tr>
        </table>
        <p>
            <input type="button" value="上一页" disabled="disabled" />
            <input type="button" value="下一页"  />
        </p>
    </div>
    </form>
</body>


//
using System;
using ;
using ;
using ;
using ;
using ;
using ;

public partial class UseJqueryPage1_GetPageDataBySql : 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string strPageSize=["pagesize"]; //每页显示的行数
        int pageSize;
        if (strPageSize == null)
        {
            pageSize = 3;//如果客户端传过来的那个pagesize为空的话,就默认每页显示3行
        }
        else {
            pageSize = Convert.ToInt32(strPageSize); //如果不为空的话就直接拿到就ok
        }
        string strPageIndex = ["pageindex"];//当前页码
        int pageIndex;
        if (strPageIndex == null)
        {
            pageIndex = 1; //如果客户端传过来的那个pageindex为空的话,就默认当前是第一页
        }
        else {
            pageIndex = Convert.ToInt32(strPageIndex); //如果不为空的话就直接拿到pageindex就ok
        }
        //调用数据库中的存储过程进行分页
        SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=MyBookShop;Integrated Security=True"); //这里是连接数据库的连接串
        SqlCommand command = new SqlCommand("books_pager", conn); //执行存储过程 books_pager表示数据库存储过程的名字
         = ;//调用存储过程必须设置commandType为执行存储
        //存储过程需要3个参数,所以必须实例化3个参数对象
        SqlParameter pPageSize = new SqlParameter("@pageSize",pageSize);
        SqlParameter pPageIndex = new SqlParameter("@pageIndex",pageIndex);
        SqlParameter pTotalPages = new SqlParameter("@totalPages",); //总页数是要输出的
         = ;//输出参数

        //增加参数
        (pPageIndex);
        (pPageSize);
        (pTotalPages);
        (); //打开数据库链接

        SqlDataReader reader = ();//执行查询
        string content = "";
        while (()) {
            int bookId = (int)reader["bookId"];
            string title = reader["Title"].ToString();
            string isbn = reader["ISBN"].ToString();
            string price = reader["UnitPrice"].ToString();
            content += "{\"id\":\""+bookId+"\",\"isbn\":\""+isbn+"\",\"title\":\""+title+"\",\"unitprice\":\""+price+"\"},";
        }
        string subContent = (0,-1); //截取json最后面的那个逗号,因为content正常输出的时候最后面多了一个逗号

        (); //关闭数据库连接
        int totalPage = (int); //必须要数据库关闭之后才可以获取输出的参数(即是总页数)
        ("{");
        ("\"name\":\"Books\",");
        ("\"totalPage\":\""+totalPage+"\",");
        ("\"records\":");
        ("[");
        (subContent);
        ("]");
        ("}");

        ();
    }
}



--数据库存储过程
create proc books_pager
	@pageSize int,--每页显示多少行
	@pageIndex int,--当前的页数
	@totalPages int output--总页数
as
declare @startIndex int
declare @endIndex int
declare @totalRows int
select @totalRows=COUNT(*) from Books
set @totalPages = @totalRows/@pageSize
if(@totalRows%@pageSize!=0)
begin
	set @totalPages=@totalPages+1
end
set @startIndex=(@pageIndex-1)*@pageSize+1
set @endIndex = @startIndex + @pageSize-1
declare @booktemp table([id] int identity(1,1) not null,bookId int)
insert @booktemp
select Id from Books
select * from @booktemp as t,Books as b
where = and >=@startIndex and <=@endIndex
go