用XMLHTTP和WEB资源交换数据(一)(kagad-原创)

     由于XMLHTTP的渐渐流行,现在不少系统之间的数据交换开始流行用XML作为数据载体以HTTP方式进行传输,不知道这是不是WEBSERVERS的一种不标准的实现方式。通常 ,我们知道WEBSERVERS也是建立在XML之上的,但是它使用起来确实非常方便,因为我们可以获得一个服务的实例可以方便的调用它有的方法。但是XMLHTTP这个随着AJAX火起来的东东,我想可能就不是那么简单好用了,因为我确实没有用他来作个和其他系统的接口。

   而这种事情就让我遇上了,因为项目需要,我们要从其它系统获取数据,对方本来说提供WEBSERVERS给我们,但是后来却告述我们这样一个接口方案:双方以协定的xml文档,系统以xmlhttp方式进行消息传递。在AJAX中也知道XMLHTTP这种方式,那就弄吧。

    先创建一个XMLHTTP对象:

function CreateActiveObject()

{//初始化 var http_request = false; //开始初始化XMLHttpRequest对象

 if(window.XMLHttpRequest)

{ //Mozilla 浏览器 http_request = new XMLHttpRequest();

 if (http_request.overrideMimeType)

 {//设置MiME类别 http_request.overrideMimeType("text/xml"); } }

else if (window.ActiveXObject)

 { // IE浏览器

try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); }

catch (e)

{ try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); }

catch (e) {} } }

return http_request;

}

接下来就准备XML数据给他POST过去吧

function GetXml(phone,startTime,endTime)

{ var head=" ";

var body=" ";

var foot = "";

return head+body+foot; }

function clickServer(phone,startTime,endTime)

{ xmlHttp = CreateActiveObject();

 if(!xmlHttp) { window.alert("不能创建XMLHttpRequest对象实例.");

 return false; }

else

{ xmlHttp.onreadystatechange = processRequest; // 确定发送请求的方式和URL以及是否同步执行下段代码

var xmlMsg = GetXml(phone,startTime,endTime) ;

 xmlHttp.open("post", http://111.111.111/aaa, false);

 xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(xmlMsg); }

}

// 处理返回信息的函数

 function processRequest()

 { if (xmlHttp.readyState == 4) { // 判断对象状态

if (xmlHttp.status == 200) { // 信息已经成功返回,开始处理信息

 processXml(xmlHttp.responseXml); }

else { //页面不正常 alert(xmlHttp.status+'数据查询失败!'); }

} }

把返回的XML解析成一个TABLE放到页面去

前提是页面要有一个TABLE的定义:

/*<table width=100% height=50 border=0>
<tbody id="xmlBody"></tbody>
</table>*/

function processXml(xmlText)

 { var xmlDom =createXmlDom();

 if(xmlDom != null)

{ xmlDom.loadXML(xmlText.xml);

var result = xmlDom.getElementsByTagName("Result");

for(var i=0;i<resul.length;++i)

{

var column1 = document.createElement('td');

var colValue1 = document.createTextNode(result[i].getAttribute('aaa'));

column1.appendChild(colValue1);

var column2 = document.createElement('td');

var colValue2 = document.createTextNode(result[i].getAttribute('bbb'));

 column2.appendChild(colValue2);

var column3 = document.createElement('td');

 var colValue3 = document.createTextNode(result[i].getAttribute('ccc'));

column3.appendChild(colValue3);

var column4 = document.createElement('td');

 var colValue4 = document.createTextNode(result[i].getAttribute('ddd'));

column4.appendChild(colValue4);

 var column5 = document.createElement('td');

 var colValue5 = document.createTextNode(result[i].getAttribute('eee'));

 column5.appendChild(colValue5);

 var column6 = document.createElement('td');

 var colValue6 = document.createTextNode(result[i].getAttribute('fff'));

column6.appendChild(colValue6);

var row = document.createElement('tr');

 row.appendChild(column1);

row.appendChild(column2);

row.appendChild(column3);

row.appendChild(column4);

 row.appendChild(column5);

row.appendChild(column6);

 document.getElementById('xmlBody').appendChild(row);

}

}

}

function createXmlDom()
{
 var signatures =["MSXML2.DOMDocument.5.0","MSXML2.DOMDocument.4.0","MSXML2.DOMDocument.3.0","MSXML2.DOMDocument","Microsoft.XmlDom"];
 for(var i=0;i<signatures.length;++i)
 {
  try
  {
   var domDoc=new ActiveXObject(signatures[i]);
   return domDoc;
  }
  catch(e){}
 }
 return null;
}

上面做了以后,已经达到了交换数据的效果,但是却由此产生了两个问题,一个是XMLHTTP中JAVASCRIPT的跨域访问的问题,虽然IE只是给出一个警告,但是客户不知道还以为系统有问题呢,二是用了ACTIVEX,而现在很多浏览器都是关闭了ACTIVEX的,这两个虽然都不是大问题,但总是不好,因为没有对客户屏蔽掉。

于是又在想有没有其他的方式呢,最后明白服务器后台也可以实现XMLHTTP,但是有了和服务器的交互,效率可能会下降,但是没有了警告提示,没有了ACTIVEX,客户没有意见了,哎,那就重新又弄过吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值