http://www.shtx.com.cn/companyxmludp/ForexparseXML.html打开看2分钟就知道了  这是一个报价的页面!  价格不断的自动刷新的看他的源代码很容易看出他是用xmlhttp做的请求一个xml文件  在客户端解析成一个table
但是有两个问题:
1:看他的代码是 var timeNum = "10";  百分之一秒请求一次??好象是1000等于一秒??
总之他请求的速度那么快不会有问题吗?   客户端解析数据有那么快吗?
服务器受的了吗?2:为什么他的后台xml文件和数据库是同步的?(一个dbf库)
xml文件如何和数据库同步??  而且是部分数据同步  例如数据库的前十行和一个xml同步!数据库在我的电脑上也有  数据则是从上海交易所发过来的 我问有的高手 说是截取交易所发过来的数据  生成XML??还有的人说:“数据是不断自动发到客户端的!  也就是说客户端和xml是关联的” 这可能吗??我看他的代码明显是用xmlhttp但是频率。这么快没问题??

解决方案 »

  1.   

    我看他的代码也是  但是他请求那么快不会有问题?而且那个XML是怎么和数据库同步的?
      

  2.   

    看源文件不就找到了吗  我发给你看一下:
    var xmlHttp;
    var requestType = "";
    var timeNum = "10"; //计数器
    var oldXmlDoc;
    var green = "#00FF00";
    var red = "#FF0000";
    var black = "#000000";//初始化数据信息
    var xmlURL = "nopage.xml";//报价数据文件路径,必须同域名之下
    var typeName = new Array("欧元美元","美元日元","英镑美元","瑞士法郎","澳元美元","美元加元");//产品的中文名称
    var typeNum = new Array("EUR","JPY","GBP","CHF","AUD","CAD");//产品的代码编号,与产品的中文名称相对应
    var readType = new Array("buy","sell");//要读取的数据列编号
    var readTypeName = new Array("买价","卖价");//读取的数据中文名称,与数据列编号相对应
    var resultsTableName = "showQuote";//用来显示结果的表名//创建XMLHttpRequest对象
    function createXMLHttpRequest() {
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } 
        else if (window.XMLHttpRequest) {
            xmlHttp = new XMLHttpRequest();
        }
    }
    //开始请求数据
    function startRequest() {
        createXMLHttpRequest();
        xmlHttp.onreadystatechange = handleStateChange;
        xmlHttp.open("GET", xmlURL + "?timeStamp=" + new Date().getTime(), true);
        xmlHttp.send(null);
    }
    //判断是否成功取回数据 
    function handleStateChange() {
        if(xmlHttp.readyState == 4) {
            if(xmlHttp.status == 200) {
    clearTableInfomation();
                    listAllQuote();
            }
    var timer = window.setTimeout("startRequest()",timeNum);
        }
    }
    //清除上次显示的结果
    function clearTableInfomation(){
    var tableBody = document.getElementById(resultsTableName);
    while(tableBody.childNodes.length > 0)
    tableBody.removeChild(tableBody.childNodes[0]);
    }
    //根据typeNum读取数据
    function listAllQuote() {
        var xmlDoc = xmlHttp.responseXML;

    /////////////////// 写入表格头
    WriteTableHead()
    ///////////////////
    for(var i=0; i<typeNum.length;i++){
    OldQuote = new Array();
    var CurrQuote = xmlDoc.getElementsByTagName(typeNum[i]);
    if(oldXmlDoc != null)
    var OldQuote = oldXmlDoc.getElementsByTagName(typeNum[i]);//上次的数据
    if(CurrQuote[0] != null)
    outputList(CurrQuote[0],OldQuote[0],i);
    }

    oldXmlDoc = xmlDoc;//保存当前的数据用于下次比较大小用
    }
    // 写入表格头
    function WriteTableHead(){
        var headRow = document.createElement("tr");
    headRow.appendChild(document.createElement("td")); //添加一个空的单元格
    for(var k=0; k<readType.length; k++){
    var cell = document.createElement("td");
    var textNode = document.createTextNode(readTypeName[k]);
    cell.appendChild(textNode);
    //表头的风格
    cell.style.cssText="text-align:left"
    headRow.appendChild(cell);
    }
    document.getElementById(resultsTableName).appendChild(headRow);
    }
    //分析数据,生成表格
    function outputList(quotes,oldquotes,id) {
    var row = document.createElement("tr");
    /////////////////// 写入行头
    WriteLineHead(row,id)
    ///////////////////
    for(var j=0; j<readType.length; j++){
    var cell = document.createElement("td");
    newq = quotes.getElementsByTagName(readType[j])[0].firstChild.nodeValue;
    var textNode = document.createTextNode(ForDight(newq+0.00,4));
    cell.appendChild(textNode);
    if(oldquotes != null){//判断大小
    oldq = oldquotes.getElementsByTagName(readType[j])[0].firstChild.nodeValue;
    if(newq+0.000 > oldq + 0.000)
    cell.style.cssText = "color:"+green;
    else if(newq+0.000 < oldq + 0.000)
    cell.style.cssText = "color:"+red;
    else
    cell.style.cssText = "color:"+black;
    }
    row.appendChild(cell);
    }
    document.getElementById(resultsTableName).appendChild(row);
    }
    // 写入行头
    function WriteLineHead(row,id){
    var headCell = document.createElement("td");//添加货品名称
    var headTextNode = document.createTextNode(typeName[id]);
    headCell.appendChild(headTextNode);
    //定义行头的风格
    headCell.style.cssText = "line-height:16px";

    row.appendChild(headCell);
    }
    //四舍五入函数
    function ForDight(Dight,How) 

    Dight = Math.round (Dight*Math.pow(10,How))/Math.pow(10,How); 
    return Dight; 

      

  3.   

    var timeNum = "10"; //计数器var timer = window.setTimeout("startRequest()",timeNum);看这  10的频率请求一次不会出问题吗?  而且客户端解析有那么快吗??
      

  4.   

    那XML 文件是如何和数据库同步的??
      

  5.   

    我做了一个一秒刷一次  目前还没什么问题  用xmlhttp返回xml文档!
      

  6.   

    用XMLHTTP在后台传输数据
    很简单啊
      

  7.   

    我知道简单  我的意思不是说做那个功能难 而是  数据库如何和xml文件同步还有   那么快的刷新速度!!
      

  8.   

    10毫秒并不意味着计时器10毫秒必须循环一次,仅仅是说中间间隔等待10毫秒而已。因为担心设置为0有问题,我经常设置为1,以便达到客户端不断访问服务器的目的。服务器如果响应不过来,会hang住客户端。这在服务其专门为少数(例如不超过100个)客户端服务(例如故意作一个演示站点,或者此站点仅限制少数ip访问)的时候完全可以。它似乎也没有使用什么数据库,仅仅是把一个xml小文件下载下来。后台一定不断有另外的进程去更新这个文件。既然不使用数据库,当然效率可以提高几十倍不成问题。数据库的好处是索引、数据集中,可没有说读写比文件快。读写应该比文件慢数倍以上。
      

  9.   

    这个很明显是AJAX,典型的AJAX.xml可以直接读写,也可作为数据库数据格式,但简单看了下代码,xmlHttp.responseXML,其返回的是兼容DOM的XML文档对象,好了,到此,一切就明了了!
      

  10.   

    用了DBF库  他是一个DBF库的哦       也就是说他的XML里的数据是DBF库里来的我看他的XML几乎和DBF数据库是同步的!  这是怎么做到的 用控制台程序生成XML文件的话速度貌似没那么快我就写了一个  用了timer类不段的更新XML但是CPU站用太高了  不知道他是用什么方法更新XML的
      

  11.   

    学习,看来现在ajax用的很广啊~