以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 XML源码及示例(仅原创和转载) 』 (http://bbs.xml.org.cn/list.asp?boardid=32) ---- 利用xml(xmldom,xmlhttp)进行客户机与服务器的数据交互(转) (http://bbs.xml.org.cn/dispbbs.asp?boardid=32&rootid=&id=6524) |
-- 作者:diegor -- 发布时间:4/7/2004 10:33:00 AM -- 利用xml(xmldom,xmlhttp)进行客户机与服务器的数据交互(转) 1、C/S的通信模式 我们在前面文章中讨论客户机与服务器的数据交互时,数据流的方向总是从服务器到客户机,很少涉及到客户机向服务器发送请求并处理返回信息的问题。实际上,在电子商务中,客户机向服务器发送数据也是一个重要的环节,如用户填写的货物订单等。 在传统的实现方案中,用户端只要在订单中做出微小的变动,就要向服务器发送消息,要求更新数据。这样就增加了服务器和网络的负载,降低了工作效率。更有效的工作方式是在客户机端对变更的信息进行缓存,然后分批定量地发送给服务器,这样一些不确定的修改信息都首先存储在客户机,只有那些确定的需要更新的数据才会发送出去,从而避免了网络和服务器做许多无谓的操作。 2、基于XML的C/S 使用XML进行C/S间的通信是一种高效的工作方式。首先在客户机对XML数据打包,然后以XML数据包为单元发送给服务器,服务器在处理完数据之后返回消息,客户机接收到消息后执行其他操作,从而结束一次通信周期。 具体实现步骤如下: ● 客户机构造一个XMLDOM对象,作为发送XML数据的载体; ● 客户机创建一个XMLHTTP对象,该对象包括多种方法和属性,可以发送XML数据到服务器上的应用程序(如ASP页面),同时准备接收响应信息; ● 客户机将XML数据包转载到XMLHTTP对象上并发送给ASP页面; ● 服务器执行ASP,并创建一个服务器端XMLDOM对象来接收XML数据; ● ASP把数据包装载到服务器端的XMLDOM对象上; ● ASP对XML数据进行必要的处理,并返回确认消息; ● 客户机接收响应消息,执行下一步操作。 3、向服务器发送数据 客户机的首要任务是构造XML数据包。XMLDOM作为数据包的载体其数据来源可以是任何XML文档或是XML文档的片段(如XML数据岛),甚至可以是使用loadXML方法接收用户输入信息后动态生成的XML文档。 下面是动态生成的一个XML文档: Set docSubmit = CreateObject(“Microsoft.XMLDOM”) docSubmit.async = False docSubmit.loadXML “<?xml version=‘1.0’?>”& “<customerorder>” & “<customer>”& txtCustomerID.Value & “</customer>”& “</customerorder>” 如果用户输入“5”作为用户ID,那么上面程序的运行结果如下所示: <?xml version=‘1.0’?> <customerorder> <customer>5</customer> </customerorder> 接下来,将XML数据添加到DOM树的<customer>元素之后。 比如有如下的一个XML数据岛: <xml id=“dsoOrder”> <?xml version=“1.0”?> <order> <orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> <price>14.99</price> <quantity>2</quantity> </orderitem> </order> </xml> 利用前面介绍的DOM技术访问<order>元素: Set docOrder = dsoOrder.XMLDocument Set nodeOrder = docOrder.selectSingleNode(“//order”) <order>元素是dsoOrder数据岛中的一部分,要把它添加到其他的DOM树中(比如前面的XML数据包),必须把<order>元素及其所有的后继节点进行备份,这是因为appendChild方法在把操作对象添加到其他DOM树中后,就从当前的DOM树中删除该对象!所以必须先调用cloneNode方法: Set nodeOrderToSend = nodeOrder.cloneNode(True) docSubmit.documentElement.appendChild nodeOrderToSend 经过以上操作,最后形成的数据包为: <?xml version=“1.0”?> <customerorder> <customer>5</customer> <order> <orderitem title=“Sushi, Anyone?” isbn=“72-80081-025”> <price>14.99</price> <quantity>2</quantity> </orderitem> </order> </customerorder> 4、XMLHTTP对象的Open方法 数据包构造完毕之后,就可以利用HTTP Request对象把数据包发送给服务器。MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。 创建XMLHTTP对象的语句如下: Set poster = CreateObject(“Microsoft.XMLHTTP”) 对象创建后调用Open方法对Request对象进行初始化,语法格式为: poster.open http-method, url, async, userID, password Open方法中包含了5个参数,前三个是必要的,后两个是可选的(在服务器需要进行身份验证时提供)。参数的含义如下表所示: 参数 说明 http-method HTTP的通信方式,比如GET或是 POST url 接收XML数据的服务器的URL地址。通常在URL中要指明 ASP或CGI程序 async 一个布尔标识,说明请求是否为异步的。如果是异步通信方式,客户机就不等待服务器的响应;如果是同步方式,客户机就要等到服务器返回消息后才去执行其他操作 userID 用户ID,用于服务器身份验证 password 用户密码,用于服务器身份验证 在下面这个例子中,客户机就是使用异步方式向“CustomerOrder.asp”页面发送了一个POST请求: poster.open "POST", "CustomerOrder.asp", False 5、XMLHTTP对象的Send方法
|
-- 作者:kxxxx001 -- 发布时间:4/7/2004 11:14:00 AM -- 好东西,收下了 |
-- 作者:阿ken -- 发布时间:4/10/2004 9:48:00 AM -- 牛!不过,不知用xsl而不是用dom是不是更简单一些?该如何实现呢?望高手赐教 |
-- 作者:锋划雪月 -- 发布时间:4/10/2004 1:24:00 PM -- 我也支持! |
-- 作者:Brooklyn -- 发布时间:4/16/2004 1:32:00 PM -- 好文章,支持一下! |
-- 作者:孤独 -- 发布时间:4/16/2004 6:29:00 PM -- 收藏~ |
-- 作者:浪子9527 -- 发布时间:4/17/2004 11:09:00 PM -- 怎么在xml文档中附加文件上传呢? |
-- 作者:ibm123 -- 发布时间:4/18/2004 6:10:00 PM -- up一下 |
-- 作者:无忧的鱼 -- 发布时间:4/26/2004 2:59:00 PM -- 关注中 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
74.219ms |