关于数据库分页面同步分页的算法

      由于采用的是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>条记录&nbsp;<font color=#ff0000>"+PageSize+"</font>条记录/页&nbsp;第&nbsp;<span id=SpanPageNum style=\"color:#ff0000\">"+intCurrent+"</span>&nbsp;页&nbsp;共<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='首  页'>&nbsp;";
   tmp = tmp + "<input type=button id=btnPre style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='PreviousPage()' value='上一页'>&nbsp;";
  tmp = tmp + "<input type=button id=btnNext style='cursor:hand;' "+sme+" class=ButtonStyle OnClick='NextPage()' value=下一页>&nbsp;";
  tmp = tmp + "<input type=button id=btnEnd style='cursor:hand;' "+sme+"  class=ButtonStyle OnClick='EndPage()' value='尾  页'>&nbsp;"
  tmp = tmp + "<input type=text id=txtGoNum style='width:30px' onkeyup='CheckNum(this)' value=1 class=inputStyle>&nbsp;";
  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;
}
}


 

转载于:https://www.cnblogs.com/wlzboy/archive/2006/06/15/427055.html

猜你喜欢

转载自blog.csdn.net/weixin_33982670/article/details/93145789