zoukankan      html  css  js  c++  java
  • Javascript实现无刷新分页

      通过Javascript实现无刷新分页,把后台得到的数据以Table的形式显示出来,获取第index页的数据是通过异步请求得到的。

    不过这里创建显示数据的Table我是用拼接字符串的,然后innerHTML赋值的。

      效果图:

    1、后台获取数据

    通过一般处理程序获取get请求中的index页,然后查询数据。

    View Code
     1 <%@ WebHandler Language="C#" Class="GetPage" %>
     2 
     3 using System;
     4 using System.Web;
     5 using System.Collections.Generic;
     6 using System.Web.Script.Serialization;
     7 using System.Data;
     8 
     9 public class GetPage : IHttpHandler {
    10     
    11     public void ProcessRequest (HttpContext context) {
    12         context.Response.ContentType = "text/plain";
    13         string strIndex = context.Request.QueryString["index"];
    14         int index=1,pageCount=0;
    15         
    16         int pageSize = 4;//每一页4条数据
    17         //返回的集合
    18         List<LoginInfo> list = new List<LoginInfo>();
    19         
    20         //转换成功
    21         if (int.TryParse(strIndex, out index))
    22         {
    23             //获取总的数据条数
    24             string strSQL1 = "select count(0) from LoginInfo ";
    25             int countTotle = Convert.ToInt32(SQLHelper.ExecuteScalar(strSQL1, System.Data.CommandType.Text));
    26             //获取总页数
    27             pageCount = countTotle % pageSize == 0 ? countTotle / pageSize : countTotle / pageSize + 1;
    28             //获取第Index页的数据
    29 
    30             string strSQL2 = @"select * from(select *,row_number() over(order by LoginId DESC) as num from LoginInfo) as tb
    31                               where num>={0} and num<={1}  order by LoginId DESC";
    32 
    33             strSQL2 = string.Format(strSQL2, pageSize * (index - 1) + 1, pageSize * index);
    34 
    35             //分页数据表
    
    36             DataTable dt = SQLHelper.GetTable(strSQL2);
    37             if (dt.Rows.Count > 0)
    38             {
    39                 foreach (DataRow dr in dt.Rows)
    40                 {
    41                     LoginInfo item = new LoginInfo();
    42                     item.LoginId = Convert.ToInt32(dr["LoginId"]);
    43                     item.LoginName = dr["LoginName"].ToString();
    44                     item.LoginPwd = dr["LoginPwd"].ToString();
    45                     item.Email = dr["Email"].ToString();
    46                     list.Add(item);
    47                 }
    48             }
    49 
    50             JavaScriptSerializer jss = new JavaScriptSerializer();
    51             //返回数据
    52             string str = jss.Serialize(new { data = list, count = pageCount });
    53 
    54             context.Response.Write(str);
    55         }
    56     }
    57  
    58     public bool IsReusable {
    59         get {
    60             return false;
    61         }
    62     }
    63 
    64 }

    2、前台接收展示数据


    在前台展示数据时候,首先有一个全局的XMLHttpRequest对象,该对象是通过方法CreateXMR创建的,用于发送请求使用。

    View Code
     1         //创建请求对象的方法
     2         function CreateXMR() {
     3             var xmr = null;
     4             if (window.XMLHttpRequest)
     5                 xmr = new XMLHttpRequest();
     6             else
     7                 xmr = new ActiveXObject("Microsoft.XMLHTTP");
     8             
     9             return xmr;
    10         }

        还需要就是通过第index页创建对应Table的方法CreateTable(index) ,该方法通过发送异步请求返回数据,创建表格对象,创建完数据表格
    后还需要创建数字导航。创建数字导航在方法CreateNumBar(index, totle)中实现。

    View Code
     1          //异步创建表格的过程
     2         function CreateTable(pageIndex) {
     3             //不符合条件跳出
     4             if (pageCount != 0 && pageIndex > pageCount || pageIndex<1) {
     5                 return;
     6             }
     7 
     8             var arrJson;//数据数组
     9             var strTable;   //拼接的表格字符串
    10 
    11             request.open("get", "GetPage.ashx?index=" + pageIndex, true);
    12 
    13             request.onreadystatechange = function () {
    14                 if (request.readyState == 4 && request.status == 200) {
    15                     var json = eval('(' + request.responseText + ')');
    16                     arrJson = json.data;
    17                     pageCount = json.count;
    18 
    19                     strTable = "<table border='1px' cellspacing='0px' class='pageTable'><tbody>";
    20                     //表头
    21                     strTable += "<tr><td>编号</td><td>登录名</td><td>密码</td><td>邮箱</td><tr>";
    22 
    23                     for (var i = 0, len = arrJson.length; i < len; i++) {
    24                         strTable += "<tr><td>" + arrJson[i].LoginId + "</td>";
    25                         strTable += "<td>" + arrJson[i].LoginName + "</td>";
    26                         strTable += "<td>" + arrJson[i].LoginPwd + "</td>";
    27                         strTable += "<td>" + arrJson[i].Email + "</td></tr>";
    28                     }
    29                     strTable += "</tbody></table>";
    30                     strTable += "<div class='pageBar'><a onclick='CreateTable(" + (pageIndex - 1) + ")'>上一页</a>";
    31                     //数字导航
    32                     strTable += CreateNumBar(pageIndex, pageCount);
    33 
    34                     strTable += "<a onclick='CreateTable(" + (pageIndex + 1) + ")'>下一页</a>";
    35 
    36                     strTable += pageIndex + "/" + pageCount + "</div>";
    37 
    38                     document.getElementById("div1").innerHTML = strTable;
    39                 }
    40 
    41             }
    42             request.send(); 
    43           }

    创建数字导航的方法CreateNumBar(index,totle)

    View Code
     1           //创建数字导航
     2           function CreateNumBar(index, totle) {
     3               //默认显示10个
     4               var strLink="";
     5               var start=index;
     6               var end=start+9;
     7 
     8               if (start < 1) {
     9                   start = 1;
    10                   end = 10;
    11               }
    12               if (end > totle) {
    13                   start = totle - 9;
    14                   if (start < 1)
    15                       start = 1;
    16                   end = totle;
    17                }
    18               for (var i = start; i <=end; i++) {
    19                   if (i == index)
    20                       strLink += "&nbsp;<a>" + i + "</a>&nbsp;";
    21                   else
    22                       strLink+="&nbsp;<a onclick=CreateTable("+i+")> ["+i+"]</a>&nbsp;";
    23                 }
    24 
    25                 return strLink;
    26            }

    最后,就是在窗体加载时候请求第一页数据。

    View Code
    1         //窗体加载
    2         window.onload = function () {
    3             //请求第一页
    4             CreateTable(1);
    5         }


    这里还定义了一个全局的变量记录总页数的   var pageCount = 0;      //总页数

    前台完整的代码是:

    View Code
      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 
      3 <html xmlns="http://www.w3.org/1999/xhtml">
      4 <head>
      5     <title></title>
      6     <style type="text/css">
      7     #div1
      8     {
      9         margin:0 auto;
     10         width:500px;
     11     }
     12     .pageTable
     13     {
     14         height:200px;
     15         width:500px;
     16     }
     17     .pageBar
     18     {
     19         width:500px;
     20         margin-top:10px;
     21         height:30px;
     22     }
     23     .pageBar a
     24     {
     25         color:Blue;
     26         cursor:pointer;
     27     }
     28     
     29     </style>
     30 
     31     <script type="text/javascript">
     32         var pageCount = 0;      //总页数
     33         //请求对象
     34         var request = CreateXMR();
     35         //创建请求对象的方法
     36         function CreateXMR() {
     37             var xmr = null;
     38             if (window.XMLHttpRequest)
     39                 xmr = new XMLHttpRequest();
     40             else
     41                 xmr = window.ActiveXObject("Mirosoft.XMLHTTP");
     42             
     43             return xmr;
     44         }
     45         //窗体加载
     46         window.onload = function () {
     47             //请求第一页
     48             CreateTable(1);
     49         }
     50          //异步创建表格的过程
     51         function CreateTable(pageIndex) {
     52             //不符合条件跳出
     53             if (pageCount != 0 && pageIndex > pageCount || pageIndex<1) {
     54                 return;
     55             }
     56 
     57             var arrJson;//数据数组
     58             var strTable;   //拼接的表格字符串
     59 
     60             request.open("get", "GetPage.ashx?index=" + pageIndex, true);
     61 
     62             request.onreadystatechange = function () {
     63                 if (request.readyState == 4 && request.status == 200) {
     64                     var json = eval('(' + request.responseText + ')');
     65                     arrJson = json.data;
     66                     pageCount = json.count;
     67 
     68                     strTable = "<table border='1px' cellspacing='0px' class='pageTable'><tbody>";
     69                     //表头
     70                     strTable += "<tr><td>编号</td><td>登录名</td><td>密码</td><td>邮箱</td><tr>";
     71 
     72                     for (var i = 0, len = arrJson.length; i < len; i++) {
     73                         strTable += "<tr><td>" + arrJson[i].LoginId + "</td>";
     74                         strTable += "<td>" + arrJson[i].LoginName + "</td>";
     75                         strTable += "<td>" + arrJson[i].LoginPwd + "</td>";
     76                         strTable += "<td>" + arrJson[i].Email + "</td></tr>";
     77                     }
     78                     strTable += "</tbody></table>";
     79                     strTable += "<div class='pageBar'><a onclick='CreateTable(" + (pageIndex - 1) + ")'>上一页</a>";
     80                     //数字导航
     81                     strTable += CreateNumBar(pageIndex, pageCount);
     82 
     83                     strTable += "<a onclick='CreateTable(" + (pageIndex + 1) + ")'>下一页</a>";
     84 
     85                     strTable += pageIndex + "/" + pageCount + "</div>";
     86 
     87                     document.getElementById("div1").innerHTML = strTable;
     88                 }
     89 
     90             }
     91             request.send(); 
     92           }
     93 
     94           //创建数字导航
     95           function CreateNumBar(index, totle) {
     96               //默认显示10个
     97               var strLink="";
     98               var start=index;
     99               var end=start+9;
    100 
    101               if (start < 1) {
    102                   start = 1;
    103                   end = 10;
    104               }
    105               if (end > totle) {
    106                   start = totle - 9;
    107                   if (start < 1)
    108                       start = 1;
    109                   end = totle;
    110                }
    111               for (var i = start; i <=end; i++) {
    112                   if (i == index)
    113                       strLink += "&nbsp;<a>" + i + "</a>&nbsp;";
    114                   else
    115                       strLink+="&nbsp;<a onclick=CreateTable("+i+")> ["+i+"]</a>&nbsp;";
    116                 }
    117 
    118                 return strLink;
    119            }
    120     </script>
    121 </head>
    122 <body>
    123 <div id="div1">
    124 </div>
    125 </body>
    126 </html>

     --------------------------------------------------------

      哦,有一个问题是json格式中的时间为 /Date(1351134618423)/ 这一种格式的数据,它表示的是从XX到现在经过毫秒,

    要把这个格式的时间转换为 2012-10-27 12:13:14格式的。这里提供一个方法ChangeDateFormat(cellval)。

    View Code
     1        //将序列化成json格式后日期(毫秒数)转成日期格式
     2         function ChangeDateFormat(cellval) {
     3             var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10));
     4             var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
     5             var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
     6             var hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours();
     7             var minu = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes();
     8             var sec = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
     9 
    10             return date.getFullYear() + "-" + month + "-" + currentDate+" "+hour+":"+minu+":"+sec;
    11         }
  • 相关阅读:
    TensorFlow(五):手写数字识别加强版
    TensorFlow(四):手写数字识别
    TensorFlow(三):非线性回归
    Apache+php搭建
    PHP基础知识(1)
    mysql8.0.11安装
    ffmpeg-20160517-git-bin-v2
    ffmpeg-20160517-git-bin
    Node.js 字体格式转换 ttf2eot ttf2woff ttf2svg
    ffmpeg-20160515-git-bin
  • 原文地址:https://www.cnblogs.com/dedeyi/p/2742595.html
Copyright © 2011-2022 走看看