试译《Ajax in Action》第四部分(五)

 
9.3服务器端的实现:VB.NET
服务器端代码需要从数据库检索属于用户选定区的(商品)范围,并通过一个XML文档返回给客户端。SQL查询得到的结果集被用于生成返回给客户端的XML文档。图9.6显示了服务器端的进程流。
服务器端代码被由客户端内容装载机对象发送的请求调用。服务器端代码首先检索代表选定区的请求参数q的值。q的值被用于创建动态SQL查询语句,动态SQL对数据库进行查询以查找文本/值对。然后,数据库查询返回的数据被格式化为XML并返回给客户端。在写代码来实现它之前,我们需要定义基本的XML文档结构。
 
 
9.3.1定义XML响应格式
我们需要创建一个简单的XML文档以返回数据库查询结果给客户端。它包含要填充的第二个选择列表的选项。表示每个选项需要一元素对,一个含有选项文本,一个含有选项值。
在我们的例子中,这个XML文档有一个名称为selectChoice的根元素,它含有名称为selectElement的单一元,紧跟着是一个或更多的entry元素。
selectElement包含HTML表单和将要在客户端填入结果的选择列表的名称。
每一个entry元素有两个子元素,optionText和optionValue,用来保存代表每一个范围的描述和ID。结构如清单9.3所示
Listing 9.3 Example of the XML response format
<?xml version="1.0" ?>
<selectChoice>
 <selectElement>
    <formName>Form1</formName>
    <formElem>ddlTerritory</formElem>
 </selectElement>
 <entry>
    <optionText>Select A Territory</optionText>
    <optionValue>-1</optionValue>
 </entry>
 <entry>
    <optionText>TerritoryDescription</optionText>
    <optionValue>TerritoryID</optionValue>
 </entry>
</selectChoice>
注意本例清单9.3中XML文档,有一个entry包含选项文本”Select A Territory”。这是显示在选择列表中的第一个选项,提醒用户选择一个值的。在从数据库获取动态选项前,服务器端代码在响应文档的开头包含这个值。
     现在已经定义好响应文档,我们可开发动态地创建XML并返回给客户端的代码了。
9.3.2写服务器端代码
服务器端代码VB.NET是简洁的。我们对数据库执行一次查询,返回一个记录集。然后遍历记录集创建XML文档并把它发送到客户端。如果没有发现任何记录,我们不创建任何entry元素,也省略静态的”Select A Territory”选项。正如你在清单9.4看到的,服务器端代码并不非常复杂。它简单地包含发给服务器的检索表单值的语句,设置内容类型,执行一次查找,并输出XML文档。
此例使用了微软SQL服务器的Northwind样本数据库。
 
 
把网页的内容类型1设置为text/xml,以确保XMLHttpRequest在客户端正确地解析服务器响应。
获取从客户端收到请求参数2:选定区的值,HTML表单名称,以及元素名称。为了增加安全性,可在此处添加一个检查,以确定这些值不为空。如果检查发现有一个值为空,这个脚本即返回一个错误响应。我们也应在程序进入一个生产环境之前,为SQL注入添加检查。这样可以确保数据库免于攻击者发送的恶意请求。
获得选定区的值之后,下一步就是产生一个SQL字符串,以从数据库里检索相应的范围3。 我们的兴趣只在于Territories表中的两个字段TerritoryDescription和TerritoryID。把选定区的值插入SQL语句的WHERE从句。为确保结果在选项列表里按字母次序显示,我们把SQL语句的ORDER BY从句设置为TerritoryDescription。接下来,我们必须执行SQL语句4。在本例中,我们调用FillDataTable()函数建立一个数据库服务器连接,执行查询,并以数据表返回结果。
现在,我们已经获得SQL查询结果,我们需要创建XML文档的第一部分5,我们在清单9.2中讨论过的。我们建立文档并添加selectElement,它含有从请求参数获取的表单名称和表单元素。
为了验证是否有结果从SQL查询返回,检查是必要的6。如果有结果,我们就向XML文档加入初步的“选择一个范围”项。
现在,我们遍历在DataTable中表示的结果8,把TerritoryDescription字段的值填入optionText标签,把TerritoryID字段的值填入optionValue标签。通过把每一个“描述/ID“对嵌套到一个entry标签里,很容易使用Javascript的XML DOM方法在客户端遍历这些值。把结果填入XML文档完了之后,需要关闭selectChoice元素,并把响应写到输出页面9。XML响应文档被返回到客户端,内容装载机对象会被通知服务器端进程已完成。内容装载机调用客户端的FillDropDoen()函数处理我们刚才创建的XML。
让我们扼要重述我们在服务器端所做的一切。我们接受了来自一个选项列表中的一个选定项的值,并在没有回发整个页面给服务器的情况下对数据库运行一次查询。然后我们产生一个XML文档并把他返回到客户端。这个过程的下一步又带我们回到客户端:现在,我们必须把XML文档元素转换为第二个选项列表中的选项。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值