最近學習了AJAX技術。AJAX,指的是非同步Javascript和xml。它的基本原理就是頁面用Javascript發送一個非同步http請求到伺服器,伺服器返回資料後,再用Javascript靜態去更改頁面某個地方的值,而無需提交表單。之前,伺服器返回的資料都是用xml的形式傳給用戶端的,但是xml傳一個類的對象的資料會很長,流量大,所以現在都是改用json來傳資料,複雜資料用json,簡單資料用string。所有AJAX中的x已經失去了它原來的意義。
  大家都知道JQuery,是一個Javascript的封裝庫,當然JQuery也實現了對AJAX的封裝,這裡將分頁就是直接用JQuery架構來講哈,比較簡單。
  首先講一下原理:分頁有兩個要點:1.有多少頁,2.每頁有多少條記錄。總頁數和每頁資料都是要從伺服器端返回的。所以我們就先來建一個一般處理常式:PageService.ashx,處理使用者的請求。取得頁數參數:GetPageCount,取得頁資料參數用GetPagedData,和PageNo。一下是一般處理常式PageService.ashx代碼:
PageService.ashx 
public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
string action=context.Request["action"];
if (action == "GetPageCount")     //如果請求類型為取得總頁數,則如下處理。
            {
//該方法是建立在強串連DataSet內的,取得總記錄數的方法
                int counts = new CommentTableAdapter().GetComentCount().Value;
int page = counts / 10;       //預設每頁10條資料
                if (counts%10 != 0)
                {
                    page++;          
                }
               context.Response.Write(page);  //取得資料後返回給用戶端。 
             
            }
else if (action == "GetPageData")  //請求類型是取得某頁的資料,則還會傳一個頁碼過來
            {
int pageNo = Convert.ToInt32(context.Request["PageNo"]);
//該方法是給出頁數,去資料庫表內取得對應頁的資料
                var data = new CommentTableAdapter().GetPageData((pageNo-1)*10+1,pageNo*10);
                var p1 = data.Select( c =>new {c.name,c.Comment });
                JavaScriptSerializer jss = new JavaScriptSerializer();
//將取得資料用json序列化後傳回用戶端
                context.Response.Write(jss.Serialize(p1));
            }
        }
接下來是在htm頁面呈現資料。
  我在這裡只是講原理,所以美工方面就不苛求了。假設每頁資料都是放在一個<ul><li></li></ul>裡面,一個li就裝一條資料。頁碼放在一個table內顯示,一行n列的table,每一列就一個頁面。
<body>
<ul id="Comment"></ul><br />
頁數:
<table id="pageNo"></table> 
</body>
接下來就是用JQuery,在頁面載入的時候給Comment這個ul和pageNo這個table初始化資料。頁面載入預設顯示第一頁資料。以下是:無重新整理分頁.htm頁面的JQuery代碼:
無重新整理分頁.htm 
<script type="text/javascript">
       $(function(){
//-----------------------------------------------------------       
         function getPageData(pageNo){ //取得某頁資料的方法
          $.post("PageService.ashx",{"action":"GetPageData","PageNo":pageNo},function(data,status){
if(status=="success"){
             $("#Comment").empty();
             var comments=$.parseJSON(data); //還原序列化json資料。
             for(var i=0;i<comments.length;i++){
               var row=comments[i];
               var li= $("<li>"+row.name+"  :  "+row.Comment+"</li>");
               $("#Comment").append(li);    //每取出一條資料就建立一個li並append到Comment/ul內。
              }
             }
          });
         }
//-------------------------------------------------------------------       
       getPageData(1); //首次進入頁面,看到的是第一頁的資料
//----------------------------------------------------------------/
//取得所有的頁數並且初始化分頁按鈕
          $.post("PageService.ashx",{"action":"GetPageCount"},function(data,status){
if(status=="success"){  
               var tr1=$("<tr></tr>");
               var pageNo=parseInt(data);
for(var i=1;i<=pageNo;i++){
                     var td=$("<td><a href=''>"+i+"</a></td>");
                     tr1.append(td);    
               }
              $("#pageNo").append(tr1); 
              $("#pageNo a").click(function(e){ //頁碼建立後,就為每一個頁碼監聽一個click事件。
                   e.preventDefault();          //取消a的預設跳轉行為
                   getPageData($(this).html()); //點擊後就去執行取頁資料的操作。
                 });
             }
          });
//----------------------------------------------------------------------------          
          
       });
</script>
 歡迎各位指正,謝謝。