一、概述
考慮Html本身不帶定時刷新頁面的控件,且不考慮使用第三方控件;因此考慮使用Javascript中的setTimeout+xmlhttp來實現定時更新頁面中部分內容,此實現在IE6.0及以上版本測試通過,其他瀏覽器暫時未測試過。
二、功能及特點
1、Javascript通過Microsoft的MSXML對象,動態獲取後臺數據庫數據;
2、Javascript解析MSXML對象中的xml內容,整理爲html後,顯示給用戶;
3、Javascript實現分頁功能;
4、通過配置文件Config.xml中的參數,可以修改div的刷新頻率、每頁顯示記錄條數等。
三、前臺Html
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FrmBayonetShow.aspx.cs" Inherits="DynamicShow_FrmBayonetShow" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>頁面動態更新</title>
</head>
<body>
<form id="FrmBayonetShow" runat="server">
<table id="BodyStyle" border="0px" width="100%">
<tr>
<td style="text-align: center; vertical-align: middle; font-family: 楷體_GB2312; font-size: 35px;
color: #0A246A; font-weight: bold; height: 50px">
頁面動態更新示例
</td>
</tr>
<tr>
<td>
<div id="divRefresh" runat="server" style="width: 100%;">
</div>
</td>
</tr>
<tr>
<td>
<div id="divPagination" runat="server" style="width: 100%;">
</div>
</td>
</tr>
</table>
<script>
//初始化參數
InitMarqueeParameter();
//定義控制分頁的變量
var page = new Pagination("divPagination");
//第一次獲取顯示數據
GenerateContent();
</script>
</form>
</body>
</html>
四、Config.xml配置文件
<?xml version="1.0" encoding="utf-8" ?>
<marquee>
<marquee_bayonetBond>
<!--頁面刷新時間間隔(秒)最小10秒-->
<ReflashInterval>10</ReflashInterval>
<!--每頁顯示記錄條數-->
<PageSize>12</PageSize>
</marquee_bayonetBond>
</marquee>
五、Javascript實現
//MSXML對象根節點
var oRoot;
//setTimeout對應ID
var time;
//刷新時間間隔
var reflashInterval=10;
//每頁顯示記錄條數
var pageSize = 20;
/***************分頁功能Javascript***************/
Pagination=function(controlId)
{
//總記錄條數
var totalNum=0;
//每頁記錄條數
var maxNum=10;
//
var pageUrl="";
var breakpage = 5;
var currentposition = 0;
var breakspace = 2;
var maxspace = 4;
//當前頁
var currentpage=1;
var perpage=10;
var id =controlId;
//分頁初始化
this.initPage = function(pageName)
{
var count = this.getTotalNum();
perpage = this.getMaxNum();
if (currentpage==null)
{
currentpage = 1;
}
else
{
currentpage = parseInt(currentpage);
}
var pagecount = Math.floor(count/perpage)+(count%perpage == 0 ? 0:1);
var pagestr = "";
var prevnum = currentpage-currentposition;
var nextnum = currentpage+currentposition;
if(prevnum<1)
prevnum = 1;
if(nextnum>pagecount)
nextnum = pagecount;
pagestr += (currentpage==1)?'<span class="disabled"> <上一頁</span>':'<span><a href="javascript:'+pageName+'.page_onclick('+(this.getIndexPage()-1)+',/''+pageName+'/')"><上一頁</a></span>';
if(prevnum-breakspace>maxspace)
{
for(i=1;i<=breakspace;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
pagestr += '...';
for(i=pagecount-breakpage+1;i<prevnum;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
}
else
{
for(i=1;i<prevnum;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
}
for(i=prevnum;i<=nextnum;i++)
{
pagestr += (currentpage==i)?'<span class="current">'+i+'</span>':'<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
}
if(pagecount-breakspace-nextnum+1>maxspace)
{
for(i=nextnum+1;i<=breakpage;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
pagestr += '<span class="break">...</span>';
for(i=pagecount-breakspace+1;i<=pagecount;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
}
else
{
for(i=nextnum+1;i<=pagecount;i++)
pagestr += '<a href="javascript:'+pageName+'.page_onclick('+i+',/''+pageName+'/')">'+i+'</a>';
}
pagestr += (currentpage==pagecount)?'<span class="disabled">下一頁 ></span>':'<a href="javascript:'+pageName+'.page_onclick('+(this.getIndexPage()+1)+',/''+pageName+'/')">下一頁 ></a>';
this.$(id).className="manu"
this.$(id).innerHTML=pagestr;
}
//獲取記錄總條數
this.getTotalNum = function()
{
return totalNum;
};
//設置記錄總條數
this.setTotalNum = function(sTotalNum)
{
totalNum = sTotalNum;
};
//獲取頁數
this.getMaxNum = function()
{
return maxNum;
};
//設置頁數
this.setMaxNum=function(sMaxNum)
{
maxNum = sMaxNum;
};
//設置當前頁
this.getIndexPage = function()
{
return currentpage;
};
this.setIndexPage=function(sCurrentPage)
{
currentpage =sCurrentPage;
};
this.page_onclick=function(num,pageStr)
{
this.setIndexPage(num);
pagination_data();
this.initPage(pageStr);
};
this.$=function(objStr)
{
return document.getElementById(objStr);
}
}
function $(objStr)
{
return document.getElementById(objStr);
}
/***************頁面參數初始化函數***************/
function InitMarqueeParameter()
{
try
{
var xmlDoc;
if(window.ActiveXObject)
{
xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = false;
xmlDoc.load("Config.xml");
}
if(xmlDoc==null)
{
return;
//alert('您的瀏覽器不支持xml文件讀取,於是本頁面禁止您的操作,推薦使用IE5.0以上可以解決此問題!');
}
var node;
//div刷新頻率
node = xmlDoc.getElementsByTagName("marquee/marquee_bayonetBond/ReflashInterval");
reflashInterval = parseInt(node[0].text);
if(reflashInterval < 10)
reflashInterval=10;
//每頁顯示記錄條數
node = xmlDoc.getElementsByTagName("marquee/marquee_bayonetBond/PageSize");
pageSize = parseInt(node[0].text);
}
catch(e)
{
}
}
/***************獲取後臺數據,生成當前顯示頁內容***************/
function GenerateContent()
{
var oXMLDoc = new ActiveXObject('MSXML');
oXMLDoc.url = "HandlerGetScrolContent.ashx?MarqueeType=marquee_bayonet2";
oRoot=oXMLDoc.Root;
if(oRoot.children == null)
{
//清除當前定時器
clearTimeout(time);
//定義定時器
time=setTimeout("GenerateContent()",1000*reflashInterval);
return;
}
page.setTotalNum(oRoot.children.length); //設置總記錄條數
page.setMaxNum(pageSize); //每頁顯示的條數
page.setIndexPage(1); //當前所在第幾頁
page.initPage("page"); //初始化頁面
pagination_data(); //生成當前顯示頁內容
}
/***************生成當前顯示頁內容***************/
function pagination_data()
{
//清除當前定時器
clearTimeout(time);
//重新定義定時器
time=setTimeout("GenerateContent()",1000*reflashInterval);
if(oRoot.children == null)
return;
//當前頁
var pIndex = page.getIndexPage();
//總頁數
var pNum = page.getMaxNum();
//計算需顯示內容的開始位置
var beginIndex = (pIndex - 1)*pNum;
//計算需顯示內容的結束位置
var endIndex = (beginIndex + pNum) > oRoot.children.length ? oRoot.children.length : (beginIndex + pNum) ;
var tablecontent="";
//配置具體滾動內容
tablecontent += "<table cellpadding=/"4/" cellspacing=/"0/" width=/"100%/" class=/"bayonet2-table/">";
for(var i=beginIndex;i<endIndex;i++)
{
var row=oRoot.children.item(i);
tablecontent += "<tr class=/"bayonet2-PM01Tr/" title=/""+IsNull(row.GetAttribute("ALARM_NAME"))+"/">";
tablecontent +="<td nowrap width=/"9%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("CHNL_NAME")) + "</td>";
tablecontent +="<td nowrap width=/"4%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("I_E_NAME")) + "</td>";
tablecontent +="<td nowrap width=/"5%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("IC_CARD")) + "</td>";
tablecontent +="<td nowrap width=/"7%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("DL_CAR_NO")) + "</td>";
tablecontent +="<td nowrap width=/"7%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("CJ_CAR_NO")) + "</td>";
tablecontent +="<td nowrap width=/"5%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("DL_WT")) + "</td>";
tablecontent +="<td nowrap width=/"5%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("CJ_WT")) + "</td>";
tablecontent +="<td nowrap width=/"15%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("DL_CONTA_NO")) + "</td>";
tablecontent +="<td nowrap width=/"15%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("CJ_CONTA_NO")) + "</td>";
tablecontent +="<td nowrap width=/"7%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("TIMEOUT")) + "</td>";
tablecontent +="<td nowrap width=/"14%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("I_E_DATE")) + "</td>";
tablecontent +="<td nowrap width=/"7%/" class=/"bayonet2-ScrolTdStyle/">" + IsNull(row.GetAttribute("PASS_MARK") + "</td>";
tablecontent +="</tr>";
}
tablecontent += "</table>";
divMarquee.innerHTML=tablecontent;
}
/***************空值替換函數***************/
function IsNull(oldstring)
{
if(oldstring == "")
return " "
else
return oldstring;
}
六、樣式表
略。
七、後臺數據獲取
略。