ASP ajax分頁(yè)教程一
更新時(shí)間:2008年11月07日 17:13:47 作者:
其實(shí)AJAX不是那么簡(jiǎn)單地寫(xiě)寫(xiě)JS就可以做到的,你必須還是要有一定的編程經(jīng)驗(yàn),否則就算寫(xiě)出來(lái)了,思路很不清晰不說(shuō),將來(lái)要改動(dòng)的時(shí)候都不知道從什么地方下手.所以在我簡(jiǎn)單接觸了面向?qū)ο缶幊毯?感覺(jué)AJAX要做好真的不容易.
為什么我寫(xiě)ASP分頁(yè)教程要提到AJAX呢,因?yàn)槲覀円嗑毩?xí)一下編程過(guò)程中,結(jié)構(gòu)化的重要性.
再加上很多朋友對(duì)分頁(yè)感到很高深,所以一直都不敢去碰他,要么就用別人寫(xiě)好的組件,要么就是改改別人的東西.特別是.net,我深有感觸,假如要快速開(kāi)發(fā)一個(gè)項(xiàng)目,我想.net是一個(gè)非常優(yōu)秀的平臺(tái).但是,因?yàn)樗膰?yán)重控件化,反而是新手接觸不到編程的思想,完全找不到編程的感覺(jué),仿佛就象在搭積木.有時(shí)候還是要練習(xí)一下底層一點(diǎn)的東西,這樣個(gè)人的技術(shù)能力才會(huì)得到提高.我可不想做只會(huì)用.NET的組裝工人.
好了,下面給出ASP分頁(yè)的源代碼給大家,都進(jìn)行了詳細(xì)的注釋,一般都可以看的懂.
因?yàn)檫@個(gè)是教程一,所以就從最簡(jiǎn)單的開(kāi)始,我直接使用的AbsolutePage來(lái)定義當(dāng)前頁(yè)面,所以沒(méi)有用諸如MoveFirst這種比較復(fù)雜的游標(biāo)方式,而且分頁(yè)也是用的下拉選擇框,等下個(gè)教程我再寫(xiě)一下進(jìn)階分頁(yè)方法,給出前進(jìn)十頁(yè),后退十頁(yè),只顯示目前所在的十頁(yè)分組的方法.
ASP雖然是一個(gè)過(guò)時(shí)的東西,不過(guò)因?yàn)樗梢允褂肑S來(lái)寫(xiě),所以我感覺(jué)要做一個(gè)項(xiàng)目DEMO的時(shí)候,使用ASP要比.NET或者JAVA更方便,因?yàn)樗挥冒惭b體積龐大的環(huán)境.簡(jiǎn)簡(jiǎn)單單配置一下就可以了.真要大規(guī)模項(xiàng)目開(kāi)發(fā)的話,我肯定還是會(huì)用.NET或JAVA的,因?yàn)檫@樣就會(huì)涉及到效率問(wèn)題了.
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<%
//定義數(shù)據(jù)庫(kù)連接語(yǔ)句
var connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+Server.MapPath("database/vote.mdb");
//建立一個(gè)rs數(shù)據(jù)庫(kù)查詢
var rs = Server.CreateObject("ADODB.Recordset")
//rs連接方式
rs.ActiveConnection = connstring
//rs查詢語(yǔ)句(按照用戶提交時(shí)間倒序查詢)
rs.Source = "select * from users order by usetime DESC"
//定義數(shù)據(jù)庫(kù)查詢模式
rs.CursorType = 3
rs.CursorLocation = 3
rs.LockType = 1
//定義每頁(yè)顯示數(shù)據(jù)數(shù)量
rs.PageSize = 10
//打開(kāi)數(shù)據(jù)庫(kù)連接
rs.Open()
//定義數(shù)據(jù)庫(kù)紀(jì)錄總數(shù),分頁(yè)總數(shù),URL路徑
var counts,pagecos,thisUrl
counts = rs.RecordCount
pagecos = rs.PageCount
thisUrl = Request.ServerVariables("URL")
//如果游標(biāo)在表中就執(zhí)行
if(!rs.EOF || !rs.BOF){
//如果url的page參數(shù)不為空就執(zhí)行
if(Request("page").Count != 0){
//定義默認(rèn)鏈接字符串,第一頁(yè),尾頁(yè),上頁(yè),下頁(yè)
//URL的page值(指定的當(dāng)前頁(yè)),當(dāng)前頁(yè),當(dāng)前每頁(yè)顯示數(shù)據(jù)數(shù)量
var defaltStr,firstpage,lastpage,prepage,nextpage,pages,nowPage,nowSize
defaltStr = '<a href="'+thisUrl+'?page='
firstpage = defaltStr+'1">首頁(yè)</a>'
lastpage = defaltStr+pagecos+'">尾頁(yè)</a>'
pages = Request("page")
//如果處于第一頁(yè)
//首頁(yè),上一頁(yè)不為鏈接
if(pages <= 1){
rs.AbsolutePage = 1;
firstpage = '首頁(yè)'
prepage = '上一頁(yè)'
nextpage = defaltStr+'2">下一頁(yè)</a>'
//如果處于最后一頁(yè)
//尾頁(yè),下一頁(yè)不為鏈接
}else if(pages >= pagecos){
rs.AbsolutePage = pagecos;
prepage = defaltStr+(pagecos-1)+'">上一頁(yè)</a>'
lastpage = '尾頁(yè)'
nextpage = '下一頁(yè)'
}else{
rs.AbsolutePage = pages
prepage = defaltStr+(Number(pages)-1)+'">上一頁(yè)</a>'
nextpage = defaltStr+(Number(pages)+1)+'">下一頁(yè)</a>'
}
}
nowPage = rs.AbsolutePage
nowSize = rs.PageSize
//如果處于最后一頁(yè),并且數(shù)據(jù)顯示數(shù)量與每頁(yè)顯示數(shù)據(jù)數(shù)量不相等時(shí)
//因?yàn)樽詈笠豁?yè)不可能每次都剛好與每頁(yè)顯示數(shù)據(jù)數(shù)量相等
//所以需要定義一個(gè)不相等的方法
if(nowPage >= pagecos && (pagecos*rs.PageSize)%counts != 0){
nowSize = counts%rs.PageSize
}
%>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="userinfo">
<tr>
<td align="center">
<!--顯示首頁(yè),上一頁(yè) -->
<%=firstpage%> <%=prepage%>
跳轉(zhuǎn)到第 <select onchange="location.href='<%=thisUrl%>?page='+this.value">
<%
//分頁(yè)依靠循環(huán)顯示
for(var num=1; num<=pagecos; num++){
if(nowPage == num){
%>
<option value="<%=num%>" selected="selected"><%=num%></option>
<%
}else{
%>
<option value="<%=num%>"><%=num%></option>
<%
}
}
%>
</select> 頁(yè)
<!--顯示下一頁(yè),尾頁(yè) -->
<%=nextpage%> <%=lastpage%>
<!--顯示當(dāng)前頁(yè)數(shù),總頁(yè)數(shù),總記錄數(shù),每頁(yè)顯示數(shù)據(jù)數(shù)量 -->
共 <%=nowPage%> / <%=pagecos%> 頁(yè) <%=counts%> / <%=rs.PageSize%> 條記錄
</td>
</tr>
<%
//內(nèi)容依靠循環(huán)顯示
for(var i=1;i<=nowSize;i++){
%>
<tr>
<td><span>用戶IP:</span><%=rs("usip")%></td>
</tr>
<tr>
<td><span>建議:</span><%=rs("us1")%></td>
</tr>
<tr>
<td><span>提交時(shí)間:</span><%=rs("usetime")%></td>
</tr>
<%
//數(shù)據(jù)庫(kù)游標(biāo)向移向下一條記錄
rs.MoveNext();
}
%>
</table>
<%
//如果數(shù)據(jù)庫(kù)游標(biāo)不在數(shù)據(jù)庫(kù)列中
}else{
Response.Write("沒(méi)有用戶信息!")
}
//關(guān)閉數(shù)據(jù)庫(kù)連接
rs.Close()
%>
再加上很多朋友對(duì)分頁(yè)感到很高深,所以一直都不敢去碰他,要么就用別人寫(xiě)好的組件,要么就是改改別人的東西.特別是.net,我深有感觸,假如要快速開(kāi)發(fā)一個(gè)項(xiàng)目,我想.net是一個(gè)非常優(yōu)秀的平臺(tái).但是,因?yàn)樗膰?yán)重控件化,反而是新手接觸不到編程的思想,完全找不到編程的感覺(jué),仿佛就象在搭積木.有時(shí)候還是要練習(xí)一下底層一點(diǎn)的東西,這樣個(gè)人的技術(shù)能力才會(huì)得到提高.我可不想做只會(huì)用.NET的組裝工人.
好了,下面給出ASP分頁(yè)的源代碼給大家,都進(jìn)行了詳細(xì)的注釋,一般都可以看的懂.
因?yàn)檫@個(gè)是教程一,所以就從最簡(jiǎn)單的開(kāi)始,我直接使用的AbsolutePage來(lái)定義當(dāng)前頁(yè)面,所以沒(méi)有用諸如MoveFirst這種比較復(fù)雜的游標(biāo)方式,而且分頁(yè)也是用的下拉選擇框,等下個(gè)教程我再寫(xiě)一下進(jìn)階分頁(yè)方法,給出前進(jìn)十頁(yè),后退十頁(yè),只顯示目前所在的十頁(yè)分組的方法.
ASP雖然是一個(gè)過(guò)時(shí)的東西,不過(guò)因?yàn)樗梢允褂肑S來(lái)寫(xiě),所以我感覺(jué)要做一個(gè)項(xiàng)目DEMO的時(shí)候,使用ASP要比.NET或者JAVA更方便,因?yàn)樗挥冒惭b體積龐大的環(huán)境.簡(jiǎn)簡(jiǎn)單單配置一下就可以了.真要大規(guī)模項(xiàng)目開(kāi)發(fā)的話,我肯定還是會(huì)用.NET或JAVA的,因?yàn)檫@樣就會(huì)涉及到效率問(wèn)題了.
復(fù)制代碼 代碼如下:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<%
//定義數(shù)據(jù)庫(kù)連接語(yǔ)句
var connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
+Server.MapPath("database/vote.mdb");
//建立一個(gè)rs數(shù)據(jù)庫(kù)查詢
var rs = Server.CreateObject("ADODB.Recordset")
//rs連接方式
rs.ActiveConnection = connstring
//rs查詢語(yǔ)句(按照用戶提交時(shí)間倒序查詢)
rs.Source = "select * from users order by usetime DESC"
//定義數(shù)據(jù)庫(kù)查詢模式
rs.CursorType = 3
rs.CursorLocation = 3
rs.LockType = 1
//定義每頁(yè)顯示數(shù)據(jù)數(shù)量
rs.PageSize = 10
//打開(kāi)數(shù)據(jù)庫(kù)連接
rs.Open()
//定義數(shù)據(jù)庫(kù)紀(jì)錄總數(shù),分頁(yè)總數(shù),URL路徑
var counts,pagecos,thisUrl
counts = rs.RecordCount
pagecos = rs.PageCount
thisUrl = Request.ServerVariables("URL")
//如果游標(biāo)在表中就執(zhí)行
if(!rs.EOF || !rs.BOF){
//如果url的page參數(shù)不為空就執(zhí)行
if(Request("page").Count != 0){
//定義默認(rèn)鏈接字符串,第一頁(yè),尾頁(yè),上頁(yè),下頁(yè)
//URL的page值(指定的當(dāng)前頁(yè)),當(dāng)前頁(yè),當(dāng)前每頁(yè)顯示數(shù)據(jù)數(shù)量
var defaltStr,firstpage,lastpage,prepage,nextpage,pages,nowPage,nowSize
defaltStr = '<a href="'+thisUrl+'?page='
firstpage = defaltStr+'1">首頁(yè)</a>'
lastpage = defaltStr+pagecos+'">尾頁(yè)</a>'
pages = Request("page")
//如果處于第一頁(yè)
//首頁(yè),上一頁(yè)不為鏈接
if(pages <= 1){
rs.AbsolutePage = 1;
firstpage = '首頁(yè)'
prepage = '上一頁(yè)'
nextpage = defaltStr+'2">下一頁(yè)</a>'
//如果處于最后一頁(yè)
//尾頁(yè),下一頁(yè)不為鏈接
}else if(pages >= pagecos){
rs.AbsolutePage = pagecos;
prepage = defaltStr+(pagecos-1)+'">上一頁(yè)</a>'
lastpage = '尾頁(yè)'
nextpage = '下一頁(yè)'
}else{
rs.AbsolutePage = pages
prepage = defaltStr+(Number(pages)-1)+'">上一頁(yè)</a>'
nextpage = defaltStr+(Number(pages)+1)+'">下一頁(yè)</a>'
}
}
nowPage = rs.AbsolutePage
nowSize = rs.PageSize
//如果處于最后一頁(yè),并且數(shù)據(jù)顯示數(shù)量與每頁(yè)顯示數(shù)據(jù)數(shù)量不相等時(shí)
//因?yàn)樽詈笠豁?yè)不可能每次都剛好與每頁(yè)顯示數(shù)據(jù)數(shù)量相等
//所以需要定義一個(gè)不相等的方法
if(nowPage >= pagecos && (pagecos*rs.PageSize)%counts != 0){
nowSize = counts%rs.PageSize
}
%>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="userinfo">
<tr>
<td align="center">
<!--顯示首頁(yè),上一頁(yè) -->
<%=firstpage%> <%=prepage%>
跳轉(zhuǎn)到第 <select onchange="location.href='<%=thisUrl%>?page='+this.value">
<%
//分頁(yè)依靠循環(huán)顯示
for(var num=1; num<=pagecos; num++){
if(nowPage == num){
%>
<option value="<%=num%>" selected="selected"><%=num%></option>
<%
}else{
%>
<option value="<%=num%>"><%=num%></option>
<%
}
}
%>
</select> 頁(yè)
<!--顯示下一頁(yè),尾頁(yè) -->
<%=nextpage%> <%=lastpage%>
<!--顯示當(dāng)前頁(yè)數(shù),總頁(yè)數(shù),總記錄數(shù),每頁(yè)顯示數(shù)據(jù)數(shù)量 -->
共 <%=nowPage%> / <%=pagecos%> 頁(yè) <%=counts%> / <%=rs.PageSize%> 條記錄
</td>
</tr>
<%
//內(nèi)容依靠循環(huán)顯示
for(var i=1;i<=nowSize;i++){
%>
<tr>
<td><span>用戶IP:</span><%=rs("usip")%></td>
</tr>
<tr>
<td><span>建議:</span><%=rs("us1")%></td>
</tr>
<tr>
<td><span>提交時(shí)間:</span><%=rs("usetime")%></td>
</tr>
<%
//數(shù)據(jù)庫(kù)游標(biāo)向移向下一條記錄
rs.MoveNext();
}
%>
</table>
<%
//如果數(shù)據(jù)庫(kù)游標(biāo)不在數(shù)據(jù)庫(kù)列中
}else{
Response.Write("沒(méi)有用戶信息!")
}
//關(guān)閉數(shù)據(jù)庫(kù)連接
rs.Close()
%>
相關(guān)文章
ASP類型網(wǎng)站結(jié)合動(dòng)網(wǎng)論壇會(huì)員的方法
ASP類型網(wǎng)站結(jié)合動(dòng)網(wǎng)論壇會(huì)員的方法...2007-11-11
用asp實(shí)現(xiàn)的數(shù)據(jù)庫(kù)中存取文件的代碼
用asp實(shí)現(xiàn)的數(shù)據(jù)庫(kù)中存取文件的代碼...2007-03-03
把網(wǎng)頁(yè)中的(電話,qq等數(shù)字)生成圖片的ASP程序
下面的代碼可以將網(wǎng)頁(yè)中一些防止別人直接復(fù)制或采集的不錯(cuò)的隱藏部分?jǐn)?shù)字信息,例如電話可以起到防止別人搜索。2008-11-11
ASP實(shí)現(xiàn)網(wǎng)頁(yè)打開(kāi)任何類型文件都提示保存的方法附代碼
ASP實(shí)現(xiàn)網(wǎng)頁(yè)打開(kāi)任何類型文件都提示保存的方法附代碼...2007-11-11

