首页 > 开发 > Xml > 正文

用ASP、VB和XML建立互联网应用程序(3)

2020-02-03 16:39:55
字体:
来源:转载
供稿:网友
假设在我们前面所说的例子中,我们想在应用程序中显示区域的左半边显示客户的姓名列表,再在每个客户姓名后面加上两个链接:purchase history和recent purchase。当用户点击其中的一个链接,客户程序就会运行一个存储过程并在右边区域显示出结果。 为了显示这个想法的灵活性,我想让用于返回数据的三个操作单元执行不同的工作过程,它们都调用getdata.asp。首先,通过调用custorderhist来运行一个存储过程,返回客户的purchase history,它搜索northwind数据库(为了方便起见我使用ms sql中自带的数据库)并返回一个数据集。用于返回recent purchase 的查询语句运行一个叫recentpurchasebycustomerid的存储过程,来接收输入的customerid参数并通过productname参数返回最近顾客购买的商品名。定义其处理过程相应sql语句如下:

  create procedure recentpurchasebycustomerid @customerid nchar(5), @productname nchar(40) output as select @productname = (select top 1 productname from products inner join ([order details] inner join orders on orders.orderid=[order details].orderid) on products.productid = [order details].productid where orders.orderdate = (select max(orders.orderdate) from orders
where [email protected]) and [email protected]) go

  不管你的查询语句中含有动态sql语句还是含有返回记录集的存储过程或是输出一个返回值,其处理post消息的方法是一样的:

  set xhttp = createobject ("msxml2.xmlhttp")
  xhttp.open "post", "http://localhost/myweb/ getdata.asp", false
  xhttp.send s

  好了,现在让我们看一看如何发送和接收数据

  客户端的xml信息是由一个<command>元素和一些子元素组成:<commandtext>元素包含了存储过程的名称,<returnsdata>元素告诉服务器,客户端是否要求接收返回数据,<param>元素包含参数信息。如果不使用参数的话,那么最简单的发送字符串查询就象下面这样:

  <command>
   <commandtext>

  存储过程或动态sql语句

  </commandtext>
   <returnsvalues>true</returnsvalues>
  </command>

  你可以为每一个参数使用一个<param>元素,来添加参数。每个<param>元素有五个子元素:name,type,direction,size和value。子元素的顺序可以随意调换,但是所有的元素都应当有不能缺少,我通常按照定义一个ado对象的值的顺序来定义它们。举例来说,custorderhist存储过程需要一个customid参数,所以用来创建发送到getdata.asp的xml字符串的代码为:

  dim s
   s = "<?xml version=""1.0""?>" & vbcrlf
   s = s & "<command><commandtext>"
   s = s & "custorderhist"
   s = s & "</commandtext>"
   s = s & "<returnsdata>" &true</returnsdata>"
   s = s & "<param>"
   s = s & "<name>customerid</name>"
   s = s & "<type><%=advarchar%></type>"
   s = s & "<direction>" & <%=adparaminput%></direction>"
   s = s & "<size>" & len(customerid)& "</size>"
   s = s & "<value>" & customerid &"</value>"
   s = s & "</param>"
   s = s & "</command>"

  注意,前面的代码都是客户端代码,ado常量是不在客户端定义的-这就是它们为什么使用<% %>标记围起来的原因。服务器在发送响应之前使用正确的值取代它们。getdata.asp页有一个response.contenttype,它的属性为"text/xml",这样,你就可以使用responsexml属性来返回结果了。当请求返回纪录,你就可以创建一个recordset对象并且使用xmlhttp来打开它:

  dim r
   set r = createobject("adodb.recordset")
   r.open xhttp.responsexml

  当查询语句返回数据时,通过设置xmlhttprequest对象的responsexml属性来创建一个domdocument:

  dim xml
   set xml = xhttp.responsexml

  输出参数的xml字符串的每个返回值都包含一个元素,它们都是根元素<values>的直接子元素,例如:

  <?xml version=""1.0"" encoding=""gb2312""?>
  <values>
  <paramname>value</paramname>
   <paramname>value</paramname>
  </values>

  如果你的数据使用别的国家的文字,你可能需要把编码属性用相应的编码替换,例如对于大部分欧洲语言,可以使用iso-8859-1

  客户端页面使用返回的数据来格式化一个html字符串用于显示,如:

  document.all("details").innerhtml = <一些格式化的html字符串>

最大的网站源码资源下载站,

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表