ASP.NET+Ajax+Javascript實現頁面div定時刷新

一、概述

  考慮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 "&nbsp;"
    else
        return oldstring;
}

 

六、樣式表

 略。

 

七、後臺數據獲取

 略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章