用AJAX實現的無刷新的分頁實現代碼(asp.net)
2024-09-01 08:29:15
供稿:網友
之前,服務器返回的數據都是用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"){