本文出自:http://www.computerworld.com.cn 作者: 北京邮电大学 张剑 (2002-02-11 07:15:00) 1、XMLHTTP对象的Send方法 用Open方法对Request对象进行初始化后,调用Send方法发送XML数据: poster.send XML-data Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流。发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程。 XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示: 值 说明 0 Response对象已经创建,但XML文档上载过程尚未结束 1 XML文档已经装载完毕 2 XML文档已经装载完毕,正在处理中 3 部分XML文档已经解析 4 文档已经解析完毕,客户端可以接受返回消息 2、 服务器端的数据处理 服务器在接收到客户机发送过来的数据包后,会马上处理数据,并做出相应的响应。服务器先创建一个XMLDOM对象,然后将Request对象中的数据载入,并通过XMLDOM对象开始访问XML数据。 在获得XML数据的访问入口后,首先做的事情是对XML文档进行验证(这部分的具体过程我们将在后面介绍XML Schema的时候一并说明)。一旦通过验证,就可以利用DOM接口对XML数据进行分析处理(例如:将提取的信息用来更新数据库中的记录)。 一个简单的ASP脚本如下: <% Set docReceived = CreateObject(“Microsoft.XMLDOM”) docReceived.async = False docReceived.load Request Set rootNode = docReceived.documentElement Set nodeCustomer = docReceived.selectSingleNode(“//customer”) customerID = nodeCustomer.firstChild.nodeValue …… %> 3、服务器端的响应消息 服务器在处理完XML数据之后,构造响应消息,并返回给客户机。消息的形式可以是纯文本、HTML页面、XML文档或者是嵌有XML数据岛的HTML页面。 首先来看一个HTML页面的例子,这个消息页面中包含了客户订购的信息: <H3>Confirmation of order</H3> <% For Each node In listOrderitem title = node.getAttribute(“title”) Set quantityNode = node.selectSingleNode(“quantity”) Quantity = quantityNode.firstChild.nodeValue %> <P> <%=title%>, <%=quantity%> </P> <% Next %> 服务器采用XML文档作为返回消息的优点是:客户机可以利用智能程序对结构化的消息进行分析,能够更准确地理解服务器所要表达的信息。 例如: <% Set docResponse = CreateObject(“Microsoft.XMLDOM”) docResponse.async = False docResponse.load “MyFixedResponse.xml” Response.ContentType =“text/xml” Response.save docResponse %> 在使用XML文档时,必须在填写Response内容之前将ContentType属性值指明为“text/xml”,表示响应消息的格式为XML。save方法的用途是将XML文档内容填充到Response对象中。 除了可以装载已存在的XML文档,还可以实时构造XML数据作为响应内容: <% Response.ContentType=“text/xml” %> <confirmation> <errorcode>0</errorcode> <shipped> <% For Each node In listOrderitem title = node.getAttribute(“title”) Set quantityNode = node.selectSingleNode(“quantity”) Quantity = quantityNode.firstChild.nodeValue %> <item title=“<%=title%>” quantity=“<%=quantity%>” /> <% Next %> </shipped> </confirmation> 4、客户机处理响应信息 客户机接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期。客户机接收响应是通过XMLHTTP对象的属性实现的: ● responseTxt:将返回消息作为文本字符串; ● responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用; ● responseStream:将返回消息视为Stream对象。 HTML页面的返回消息一般是被作为文本字符串进行处理。下面的这个例子是一个完整的交互过程,客户机脚本的代码如下: <DIV ID=“displayArea”> </DIV> <SCRIPT LANGUAGE=“VBScript”> Sub Submit_OnClick() ’创建XMLDOM Set docSubmit = CreateObject(“Microsoft.XMLDOM”) ……’如前所述构造数据包 ’向服务器发送数据包 Set poster = CreateObject(“Microsoft.XMLHTTP”) poster.open “POST”, “CustomerOrder.asp”, False poster.send docSubmit ’接收Resoponse消息 displayArea.innerHTML = poster.responseText End Sub Submit_OnClick方法首先创建XMLDOM对象用来装载XML数据,然后创建XMLHTTP对象以同步方式将数据包发送给服务器。在服务器处理完毕之后返回一个HTML页面作为响应消息。XMLHTTP对象按照文本字符串方式接收消息,并把它与DIV元素绑定起来,在浏览器中显示最终结果。 响应XML数据的基本过程与上面的这个例子是一样的,只是在接收时,使用responseXML属性,然后利用DOM技术对XML消息做进一步的处理。这样,一个完整的C/S交互过程就全部结束了。

评论