XML技术系列讲座(十)

10.       客户机与服务器的数据交互(下)

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”,表示响应消息的格式为XMLsave方法的用途是将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交互过程就全部结束了。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值