简介
许多ASP开发者都希望在自己的网站中能够使用到微软提供的支持XML
的新功能。其中,有些人发现可以使用XML来装饰网站,但是,如果仅仅
是只使用XMLDOM的话,你就会失去其他一些更重要的东西。毕竟,XML是用来
作为一种网上数据表现和数据交换的形象出现的。尽管使用XML可以非常满意
地描绘你的数据,但是开发者却不得不使用CGI来进行浏览器和服务器之间的
数据交换,除非你在浏览器端和客户端都使用XML文档。
当然CGI从传达信息的角度来说是能够完全胜任的,但是如果要是和XML来
一起使用的话就让XML失去了很多自己的用处。幸运的是,微软提供了一种更加
有效的方法来传输XML,虽然该方法在很大程度上并不被人所重视。
在微软提供的MSXML解释器包中有一系列的对象,也许没有人会重视其中的
XMLHTTPConnection对象。简而言之,它允许你打开一个到服务器上的HTTP连接,
发送一些数据和取回一些数据。并且所有的这一切都是在很少的几段脚本中就能够实现。
使用XMLHTTP对象通常是进行XML数据交换,但其他格式的数据也是允许的。
在商业程序中的运用
这种交换类型的标准模式是客户端发送一个XML格式的文本字符串到服务端,
然后服务端将这个字符串装载入一个XMLDOM对象中并且解释它,然后返回一段
HTML给客户端,或则是另外一段XML代码给客户端让客户端的浏览器自己解释。
在这种方式下,对于信息的传递来说是非常有效的形式,尤其是当你使用
DHTML允许你根据返回信息动态显示时。
举例如下(只能够运行在客户端和服务端都安装有IE5的情况下)
%
if (Request.ServerVariables("REQUEST_METHOD") == "POST" )
{
var req= Server.CreateObject("Microsoft.XMLDOM");
req.async=false;
req.load(Request);
if (req.documentElement.nodeName=="timesheet")
{
//对数据随便进行一些处理。。。
.....
Response.write("h1Timesheet Updated!/h1b"+req.documentElement.text+"/b");
}
}
else
{ %
div id="divDisplay"The response will be put in here/div
input type="button" onclick="sendData();" value="Send it!"
script
function sendData(){
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.Open("POST", "http://www.yoursite.com/thispage.asp", false);
xmlhttp.Send("timesheetAn impossibly useless timesheet fragment/timesheet");
divDisplay.innerHTML=xmlhttp.responseText;
}
/script
% } %
在上面的代码中,其中客户端的脚本将建立一个适当的COM对象,打开一个在网站
www.yoursite.com的连接(使用了HTTP的POST方法,同步方式),使用Send方法发送
一个XML片段,然后根据服务器上的响应填充divDisplay区域(这里使用了DHTML)。
具体的执行过程是,在服务器上,Request对象被转载入一个XML文档然后被解释器解释。
服务器响应XMLHTTP连接的方式和响应其他任何方式的HTTP连接是一样的,也是使用了
Response对象。注意的是XMLHTTP本身并不检查request或则response的有效性,也就是说
Request或则Response中的数据可是并不需要一定是XML文档。
“聪明,”你也许会说。“但是为什么我们不使用CGI来代替它呢?”呵呵,我们要注意
这样一件事,就是如果使用这种方式进行客户端--服务端的交互时整个页面并没有被刷新。
我们都知道,如果要是通过CGI来做任何事情都必将导致浏览器接收一个完整的新页面,而
这尤其影响
插入Excel的电子表格中。这将是一个无痕的解决方案,简单的一个按钮也许会让你的老板、
同事或任何其他人的关系大有改观。
下面是我实现上述方法的一个代码片段。它使用XMLHTTP将服务器中的信息载入,然后将
其插入电子表格中。
Public Sub UpdateSheet()
Dim xmlhttp
Set xmlhttp = CreateObject("Microsoft.XMLHTTP")
Call xmlhttp.Open("POST", "http://www.yourserver.com/yourpage.asp", False)
Call xmlhttp.send("reqtimesheet user='jimbob'/")
Dim xmldoc
Set xmldoc = CreateObject("Microsoft.XMLDOM")
xmldoc.async = False
xmldoc.loadxml(xmlhttp.responsexml)
Worksheets("TimeSheet").Range("A1").Value = xmldoc.documentelement.getAttribute("firstname")
Worksheets("TimeSheet").Range("B1").Value = xmldoc.documentelement.getAttribute("lastname")
Worksheets("TimeSheet").Range("C37").Value = xmldoc.documentelement.selectSingleNode("totalhours").Text
End Sub
这个VBA的宏相当的简单。给服务器发送一个请求,然后将服务器上的响应插入
XML文档,然后更新Excel中cell中的内容。当然,我们可以使用这个技术做其他更多的运用。
例如从一个Office运用程序中上载数据到服务器上的XML文档中(XML应该是你首选的格式,
而不是Office 2000中提供的愚蠢的OfficeXML实现).或则把XML/ASP作为一个你数据库的shell
这样,你的运用程序对于数据库就有了一个简洁、统一的接口,而对数据库结构的
改动就不必要改动你所有的客户端代码了。
我发现XMLHTTP对象在我的编程中非常的有用。我一般使用Visual Basic, Delphi, 和 Visual J++编写程序,在这个过程中,我经常发现这些语言各自对在线程序处理的方法非常地不同,
他们各自有自己的对网络程序的处理机制,但是如果你要是在处理网络程序时都使用统一
的XMLHTTP连接方式,那么连接服务器的代码将非常小,甚至更优化,这是一种对所有的
语言都统一的接口。