由于采用的是AJAX技术,页面显示数据是通过xml得到的,当要显示大量的数据时,一次性加载到页面上,就得一次性从服务请求大量的数据到页面中,这就加重了服务器端的压力。但是如果每次翻页都到服务端去请求数据,这样也会给服务端造成压力。更好的解决方法是采用数据库端分页与页面分页同时进行。
//分页类
//数据库总记录数,数据库的每页平均记录数,页面的平均录数,数据源,重新加载数据的方法名,显示数据页面的方法
function PagInation(DBCount,DBPageSize,PageSize,DataSource,ReLoadFunc,ListData)
{
if(DBCount==undefined || DBCount==0 || DBCount==null || DBCount=="")
DBCount = 0;
if(DBPageSize==undefined || DBPageSize==0 || DBPageSize==null || DBPageSize=="")
DBPageSize = 100;
if(PageSize==undefined || PageSize==0 || PageSize==null || PageSize=="")
PageSize = 10;
this.PageSize = PageSize;
var DBSize =DBPageSize;
var DBNum=1;//数据库中的页数,数据库中的平均页数为100条
var intCurrent = 1;//当前页
var intCount=DBCount;//数据库中的总记录数
var DBPageCount;//数据库中的总记页数
var intPageCount;//页面的总页数
var NewDataSource = new Array();//每次页面分页时产生的数据源
var DataArr = new Array();
var oTable;//显示数据的表格
var ErrMsg;//显示无记录时的信息
//得到数据中分页的总页数
function SetDBPageCount()
{
var a = parseInt(intCount/DBSize);
var b = intCount%DBSize;
if(b!=0)
//余数不等于0
a = a +1;
return a;
}
//得到页面中的分页的总页数
function SetIntPageCount()
{
var a = parseInt(intCount / PageSize);
var b = intCount % PageSize;
if(b!=0)
a= a+1;
return a;
}
//得到DataArr
function TheFirstLoad()
{
DataArr = DataSource;
var DArr = new Array();
var EndIndex = 0;
if(PageSize>intCount)
EndIndex = intCount;
else
EndIndex = PageSize;
for(var i =0 ;i<EndIndex;i++)
{
DArr[i] = DataArr[i];
}
NewDataSource = DArr;
ListData();
}
this.SetButtonStatus =function ()
{
SetBtnStatus();
}
//设置按钮的状态
function SetBtnStatus()
{
var DataLen = DataArr.length;//得到当前数
//先是判断当前页面的状态
if(intCount==0)
{//无记录时
btnHome.disabled = true;
btnPre.disabled = true;
btnNext.disabled =true ;
btnEnd.disabled =true ;
btnGoPage.disabled = true;
return;
}
if(intPageCount==1)
{//只有一页
btnHome.disabled = true;
btnPre.disabled = true;
btnNext.disabled =true ;
btnEnd.disabled =true ;
btnGoPage.disabled = true;
return;
}
//大于一页
if(intCurrent==intPageCount)
{//下一页,尾页按钮无效
btnHome.disabled = false;
btnPre.disabled = false;
btnNext.disabled =true ;
btnEnd.disabled =true ;
return;
}
if(intCurrent==1)
{//首页,上一页
btnHome.disabled = true;
btnPre.disabled = true;
btnNext.disabled =false ;
btnEnd.disabled =false;
}
else
{
btnHome.disabled = false;
btnPre.disabled = false;
btnNext.disabled =false ;
btnEnd.disabled =false;
}
}
//计算DBNum的值
function NumerationDBNum(index)
{//index为当前页码
var a = index*PageSize;
var b = a % DBSize;
var c = parseInt(a / DBSize);
if(b!=0)
{
c = c+1;
}
return c;
}
//跳转
function GoPage(NextPage)
{
//得到当前页
//清除
if(NextPage>intPageCount)
NextPage = intPageCount;
if(NextPage<1)
NextPage = 1;
intCurrent = NextPage;
txtGoNum.value = intCurrent;
//向前翻页
if(NextPage*PageSize>DBNum*DBSize)
{
DBNum = NumerationDBNum(intCurrent);//计算DBNum的值
//加载新的数据
ReLoad(NextPage);
return;
}
//向后翻页
if(NextPage*PageSize<=(DBNum-1)*DBSize)
{
//加载新的数据
DBNum = NumerationDBNum(intCurrent);//计算DBNum的值
ReLoad(NextPage);
return;
}
//没有重新加载时
//分页
pagination(NextPage);
}
//分页
function pagination(index)
{
//得到该页的数据
var StartIndex=0;
StartIndex =(index-1)*PageSize - (DBNum-1)*DBSize;
var EndIndex = DataArr.length;
EndIndex = StartIndex+PageSize;
if(EndIndex>DataArr.length)
EndIndex = DataArr.length;
var DArr = new Array();
for(var i=StartIndex,j=0;i<EndIndex;i++,j++)
{
//列出数据
DArr[j] = DataArr[i];
}
NewDataSource = DArr;
if (NewDataSource.length<=0)
ShowNoRecord();
ListData();
SetBtnStatus();
}
//转到第几页
this.GoPageFunc = function (nextPage)
{
GoPage(nextPage);
SetPageNum();
}
//显示一行的数据
var NewArray = new Array();
//重新加载数据
function ReLoad(index)
{
ReLoadFunc();
}
//翻页
this.PagInationFunc = function(index)
{
pagination(index);
}
//得到当前页
this.getCurrentNum = function()
{
return intCurrent;
}
this.Run = function ()
{
//得到数据库总页数
DBPageCount = SetDBPageCount();
//得到页面总页数
intPageCount = SetIntPageCount();
//设置按钮的状态
intCurrent = 1;
//先是加载数据
TheFirstLoad();
}
//首页
this.HomePage = function ()
{
GoPage(1);
SetPageNum();
}
//上一页
this.PreviousPage = function ()
{
GoPage(intCurrent-1);
SetPageNum();
}
//下一页
this.NextPage = function ()
{
GoPage(intCurrent+1);
SetPageNum();
}
//尾页
this.EndPage = function ()
{
GoPage(intPageCount);
SetPageNum();
}
//设置数据源
this.SetDataArray = function (DataArray)
{
DataArr = DataArray;
}
//写基本信息,如果数据库中的记录数用于外部调用
this.WriteWord = function()
{
//alert(intPageCount);
var tmp = "";
tmp = "共有<font color=#ff0000>"+DBCount+"</font>条记录 <font color=#ff0000>"+PageSize+"</font>条记录/页 第 <span id=SpanPageNum style=\"color:#ff0000\">"+intCurrent+"</span> 页 共<font color=#ff0000>"+intPageCount+"</font>页";
return tmp;
}
//写翻页按钮
this.WriteBtn = function ()
{
var tmp ="";
tmp =tmp + "<input type=button id=btnHome style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='HomePage()' value='首 页'> ";
tmp = tmp + "<input type=button id=btnPre style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='PreviousPage()' value='上一页'> ";
tmp = tmp + "<input type=button id=btnNext style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='NextPage()' value=下一页> ";
tmp = tmp + "<input type=button id=btnEnd style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='EndPage()' value='尾 页'> "
tmp = tmp + "<input type=text id=txtGoNum style='width:30px' οnkeyup='CheckNum(this)' value=1 class=inputStyle> ";
tmp = tmp + "<input type=button id=btnGoPage style='cursor:hand;' "+sme+" class=ButtonStyle onClick=GoPage() value='转 到'>";
return tmp;
}
//对输入的数值进行约束
this.CheckNum = function (obj)
{
var str="1234567890";
var objValue = obj.value;
for(var i=0;i<objValue.length;i++)
{
var c = objValue.substring(i,i+1);
if(str.indexOf(c)==-1)
obj.value="";
}
}
//显示无记录的信息
function ShowNoRecord()
{
var otr = oTable.insertRow();
var oTd = otr.insertCell();
oTd.colSpan=oTable.rows.cells.length;
oTd.innerHTML = ErrMsg;
}
this.SetParam = function (oTable,msg)
{
oTable = oTable;
ErrMsg = msg;
}
//设置显示当前页码
function SetPageNum()
{
SpanPageNum.innerText = intCurrent;
}
//得到数据库中的总页数
this.GetDBCurrentNum =function()
{
return DBNum;
}
//得到新数据源
this.GetNewDataSource = function()
{
return NewDataSource;
}
}