用AJAX實(shí)現(xiàn)的無(wú)刷新的分頁(yè)實(shí)現(xiàn)代碼(asp.net)
更新時(shí)間:2011年04月19日 00:59:12 作者:
最近學(xué)習(xí)了AJAX技術(shù)。AJAX,指的是異步的Javascript和xml。它的基本原理就是頁(yè)面用Javascript發(fā)送一個(gè)異步的http請(qǐng)求到服務(wù)器,服務(wù)器返回?cái)?shù)據(jù)后,再用Javascript靜態(tài)的去更改頁(yè)面某個(gè)地方的值,而無(wú)需提交表單。
之前,服務(wù)器返回的數(shù)據(jù)都是用xml的形式傳給客戶端的,但是xml傳一個(gè)類的對(duì)象的數(shù)據(jù)會(huì)很長(zhǎng),流量大,所以現(xiàn)在都是改用json來(lái)傳數(shù)據(jù),復(fù)雜數(shù)據(jù)用json,簡(jiǎn)單數(shù)據(jù)用string。所有AJAX中的x已經(jīng)失去了它原來(lái)的意義。
大家都知道JQuery,是一個(gè)Javascript的封裝庫(kù),當(dāng)然JQuery也實(shí)現(xiàn)了對(duì)AJAX的封裝,這里將分頁(yè)就是直接用JQuery框架來(lái)講哈,比較簡(jiǎn)單。
首先講一下原理:分頁(yè)有兩個(gè)要點(diǎn):1.有多少頁(yè),2.每頁(yè)有多少條記錄??傢?yè)數(shù)和每頁(yè)數(shù)據(jù)都是要從服務(wù)器端返回的。所以我們就先來(lái)建一個(gè)一般處理程序:PageService.ashx,處理用戶的請(qǐng)求。取得頁(yè)數(shù)參數(shù):GetPageCount,取得頁(yè)數(shù)據(jù)參數(shù)用GetPagedData,和PageNo。一下是一般處理程序PageService.ashx代碼:
PageService.ashx
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string action=context.Request["action"];
if (action == "GetPageCount") //如果請(qǐng)求類型為取得總頁(yè)數(shù),則如下處理。
{
//該方法是建立在強(qiáng)連接DataSet內(nèi)的,取得總記錄數(shù)的方法
int counts = new CommentTableAdapter().GetComentCount().Value;
int page = counts / 10; //默認(rèn)每頁(yè)10條數(shù)據(jù)
if (counts%10 != 0)
{
page++;
}
context.Response.Write(page); //取得數(shù)據(jù)后返回給客戶端。
}
else if (action == "GetPageData") //請(qǐng)求類型是取得某頁(yè)的數(shù)據(jù),則還會(huì)傳一個(gè)頁(yè)碼過(guò)來(lái)
{
int pageNo = Convert.ToInt32(context.Request["PageNo"]);
//該方法是給出頁(yè)數(shù),去數(shù)據(jù)庫(kù)表內(nèi)取得對(duì)應(yīng)頁(yè)的數(shù)據(jù)
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();
//將取得數(shù)據(jù)用json序列化后傳回客戶端
context.Response.Write(jss.Serialize(p1));
}
}
接下來(lái)是在htm頁(yè)面呈現(xiàn)數(shù)據(jù)。
我在這里只是講原理,所以美工方面就不苛求了。假設(shè)每頁(yè)數(shù)據(jù)都是放在一個(gè)<ul><li></li></ul>里面,一個(gè)li就裝一條數(shù)據(jù)。頁(yè)碼放在一個(gè)table內(nèi)顯示,一行n列的table,每一列就一個(gè)頁(yè)面。
<body>
<ul id="Comment"></ul><br />
頁(yè)數(shù):
<table id="pageNo"></table>
</body>
接下來(lái)就是用JQuery,在頁(yè)面加載的時(shí)候給Comment這個(gè)ul和pageNo這個(gè)table初始化數(shù)據(jù)。頁(yè)面加載默認(rèn)顯示第一頁(yè)數(shù)據(jù)。以下是:無(wú)刷新分頁(yè).htm頁(yè)面的JQuery代碼:
無(wú)刷新分頁(yè).htm
<script type="text/javascript">
$(function(){
//-----------------------------------------------------------
function getPageData(pageNo){ //取得某頁(yè)數(shù)據(jù)的方法
$.post("PageService.ashx",{"action":"GetPageData","PageNo":pageNo},function(data,status){
if(status=="success"){
$("#Comment").empty();
var comments=$.parseJSON(data); //反序列化json數(shù)據(jù)。
for(var i=0;i<comments.length;i++){
var row=comments[i];
var li= $("<li>"+row.name+" : "+row.Comment+"</li>");
$("#Comment").append(li); //每取出一條數(shù)據(jù)就創(chuàng)建一個(gè)li并append到Comment/ul內(nèi)。
}
}
});
}
//-------------------------------------------------------------------
getPageData(1); //首次進(jìn)入頁(yè)面,看到的是第一頁(yè)的數(shù)據(jù)
//----------------------------------------------------------------/
//取得所有的頁(yè)數(shù)并且初始化分頁(yè)按鈕
$.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){ //頁(yè)碼創(chuàng)建后,就為每一個(gè)頁(yè)碼監(jiān)聽(tīng)一個(gè)click事件。
e.preventDefault(); //取消a的默認(rèn)跳轉(zhuǎn)行為
getPageData($(this).html()); //點(diǎn)擊后就去執(zhí)行取頁(yè)數(shù)據(jù)的操作。
});
}
});
//----------------------------------------------------------------------------
});
</script>
歡迎各位指正,謝謝。
大家都知道JQuery,是一個(gè)Javascript的封裝庫(kù),當(dāng)然JQuery也實(shí)現(xiàn)了對(duì)AJAX的封裝,這里將分頁(yè)就是直接用JQuery框架來(lái)講哈,比較簡(jiǎn)單。
首先講一下原理:分頁(yè)有兩個(gè)要點(diǎn):1.有多少頁(yè),2.每頁(yè)有多少條記錄??傢?yè)數(shù)和每頁(yè)數(shù)據(jù)都是要從服務(wù)器端返回的。所以我們就先來(lái)建一個(gè)一般處理程序:PageService.ashx,處理用戶的請(qǐng)求。取得頁(yè)數(shù)參數(shù):GetPageCount,取得頁(yè)數(shù)據(jù)參數(shù)用GetPagedData,和PageNo。一下是一般處理程序PageService.ashx代碼:
PageService.ashx
復(fù)制代碼 代碼如下:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string action=context.Request["action"];
if (action == "GetPageCount") //如果請(qǐng)求類型為取得總頁(yè)數(shù),則如下處理。
{
//該方法是建立在強(qiáng)連接DataSet內(nèi)的,取得總記錄數(shù)的方法
int counts = new CommentTableAdapter().GetComentCount().Value;
int page = counts / 10; //默認(rèn)每頁(yè)10條數(shù)據(jù)
if (counts%10 != 0)
{
page++;
}
context.Response.Write(page); //取得數(shù)據(jù)后返回給客戶端。
}
else if (action == "GetPageData") //請(qǐng)求類型是取得某頁(yè)的數(shù)據(jù),則還會(huì)傳一個(gè)頁(yè)碼過(guò)來(lái)
{
int pageNo = Convert.ToInt32(context.Request["PageNo"]);
//該方法是給出頁(yè)數(shù),去數(shù)據(jù)庫(kù)表內(nèi)取得對(duì)應(yīng)頁(yè)的數(shù)據(jù)
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();
//將取得數(shù)據(jù)用json序列化后傳回客戶端
context.Response.Write(jss.Serialize(p1));
}
}
接下來(lái)是在htm頁(yè)面呈現(xiàn)數(shù)據(jù)。
我在這里只是講原理,所以美工方面就不苛求了。假設(shè)每頁(yè)數(shù)據(jù)都是放在一個(gè)<ul><li></li></ul>里面,一個(gè)li就裝一條數(shù)據(jù)。頁(yè)碼放在一個(gè)table內(nèi)顯示,一行n列的table,每一列就一個(gè)頁(yè)面。
<body>
<ul id="Comment"></ul><br />
頁(yè)數(shù):
<table id="pageNo"></table>
</body>
接下來(lái)就是用JQuery,在頁(yè)面加載的時(shí)候給Comment這個(gè)ul和pageNo這個(gè)table初始化數(shù)據(jù)。頁(yè)面加載默認(rèn)顯示第一頁(yè)數(shù)據(jù)。以下是:無(wú)刷新分頁(yè).htm頁(yè)面的JQuery代碼:
無(wú)刷新分頁(yè).htm
復(fù)制代碼 代碼如下:
<script type="text/javascript">
$(function(){
//-----------------------------------------------------------
function getPageData(pageNo){ //取得某頁(yè)數(shù)據(jù)的方法
$.post("PageService.ashx",{"action":"GetPageData","PageNo":pageNo},function(data,status){
if(status=="success"){
$("#Comment").empty();
var comments=$.parseJSON(data); //反序列化json數(shù)據(jù)。
for(var i=0;i<comments.length;i++){
var row=comments[i];
var li= $("<li>"+row.name+" : "+row.Comment+"</li>");
$("#Comment").append(li); //每取出一條數(shù)據(jù)就創(chuàng)建一個(gè)li并append到Comment/ul內(nèi)。
}
}
});
}
//-------------------------------------------------------------------
getPageData(1); //首次進(jìn)入頁(yè)面,看到的是第一頁(yè)的數(shù)據(jù)
//----------------------------------------------------------------/
//取得所有的頁(yè)數(shù)并且初始化分頁(yè)按鈕
$.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){ //頁(yè)碼創(chuàng)建后,就為每一個(gè)頁(yè)碼監(jiān)聽(tīng)一個(gè)click事件。
e.preventDefault(); //取消a的默認(rèn)跳轉(zhuǎn)行為
getPageData($(this).html()); //點(diǎn)擊后就去執(zhí)行取頁(yè)數(shù)據(jù)的操作。
});
}
});
//----------------------------------------------------------------------------
});
</script>
歡迎各位指正,謝謝。
您可能感興趣的文章:
- JQuery+Ajax無(wú)刷新分頁(yè)的實(shí)例代碼
- jQuery Pagination Ajax分頁(yè)插件(分頁(yè)切換時(shí)無(wú)刷新與延遲)中文翻譯版
- JS+Ajax+Jquery實(shí)現(xiàn)頁(yè)面無(wú)刷新分頁(yè)以及分組 超強(qiáng)的實(shí)現(xiàn)
- php+ajax實(shí)現(xiàn)無(wú)刷新分頁(yè)的方法
- AspNetAjaxPager,Asp.Net通用無(wú)刷新Ajax分頁(yè)控件,支持多樣式多數(shù)據(jù)綁定
- ajax實(shí)現(xiàn)無(wú)刷新分頁(yè)(php)
- php ajax無(wú)刷新分頁(yè),支持id定位
- 在Thinkphp中使用ajax實(shí)現(xiàn)無(wú)刷新分頁(yè)的方法
- php+ajax實(shí)現(xiàn)無(wú)刷新分頁(yè)
- 簡(jiǎn)單實(shí)現(xiàn)Ajax無(wú)刷新分頁(yè)效果
相關(guān)文章
AjaxFileUpload結(jié)合Struts2實(shí)現(xiàn)多文件上傳(動(dòng)態(tài)添加文件上傳框)
本文是腳本之家小編給大家分享的AjaxFileUpload結(jié)合Struts2實(shí)現(xiàn)多文件上傳功能,如果項(xiàng)目需求是不確定多少個(gè)文件,我們需要?jiǎng)討B(tài)的添加文件上傳框,具體實(shí)現(xiàn)代碼大家參考下本文2017-09-09
使用Ajax實(shí)現(xiàn)簡(jiǎn)單的帶百分比進(jìn)度條實(shí)例
最近做項(xiàng)目遇到這樣的需求要求當(dāng)進(jìn)行文件長(zhǎng)傳保存等操作時(shí),能在頁(yè)面顯示一個(gè)帶百分比的進(jìn)度條,給用戶一個(gè)好的交互體驗(yàn),下面通過(guò)實(shí)例代碼給大家介紹基于ajax實(shí)現(xiàn)帶百分比進(jìn)度條效果,需要的的朋友參考下吧2017-07-07
react axios 跨域訪問(wèn)一個(gè)或多個(gè)域名問(wèn)題
這篇文章主要介紹了react axios 跨域訪問(wèn)一個(gè)或多個(gè)域名問(wèn)題,本文通過(guò)實(shí)例代碼截圖的形式給大家展示的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
表單上傳功能實(shí)現(xiàn) ajax文件異步上傳
這篇文章主要為大家詳細(xì)介紹了表單上傳功能和文件上傳功能實(shí)現(xiàn),ajax文件異步上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

