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:看他的代码是 var timeNum = "10"; 百分之一秒请求一次??好象是1000等于一秒??
总之他请求的速度那么快不会有问题吗? 客户端解析数据有那么快吗?
服务器受的了吗?2:为什么他的后台xml文件和数据库是同步的?(一个dbf库)
xml文件如何和数据库同步?? 而且是部分数据同步 例如数据库的前十行和一个xml同步!数据库在我的电脑上也有 数据则是从上海交易所发过来的 我问有的高手 说是截取交易所发过来的数据 生成XML??还有的人说:“数据是不断自动发到客户端的! 也就是说客户端和xml是关联的” 这可能吗??我看他的代码明显是用xmlhttp但是频率。这么快没问题??
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;
}
很简单啊