用XML和ASP实现一个灵活的购物车
实现虚拟购物车(shopping cart)的方法并不唯一。最近我恰好改写了一个传统的ASP购物车,目标是在保留了它原有外观的基础上让它变得更灵活、速度更快。我决定利用XML开发一个跨浏览器的解决方案。现在,请允许我介绍一下在这个过程中我所遇到的问题以及我是如何提高原有设计的。
原有的购物车 除了界面之外,原有的购物车好像没有其它的优点。它只能显示出有限的行数,客户要查看未显示的条目时,必须向前或者向后翻页(即导航)。这个问题归因于购物车中的所有内容都保存在基于ASP会话ID的表格中。当客户翻查购物车中的项目时,必须执行一个查询。此外,如果会话期结束,购物车的内容就会保存到表格中去,除非你手动删除它。 新的设计方法 我并不想重复已经发生的错误,因此新的购物车是基于XML会话(XML-session)而不是基于表格。这种方法有几个优点。首先,整个购物车存储在客户端的一个XML数据岛中(如清单A所示)。这就消除了简单的导航对表格的查询需求。相反,用到了MozillaDSO()和xmlPage()函数。 除了导航之外,xmlPage()方法还提供了老购物车所没有提供的功能——修改数量和删除商品种类的能力。这是因为它用到了两个XML数据岛:一个绑定了(bound)、另一个则没有,绑定数据岛的改变在更新之前并不会影响到未绑定的数据岛。一旦点击更新按钮,就会有一个机制,例如XMLHTTP,把改变传递给server。如果因为某些原因造成你不能完全信任微软Internet Explorer或者Mozilla的XMLHTTP的话,你可以用一个隐藏框架(即iframe)和表单以及输入框来实现同样的功能。清单B给出了更新函数的javascript。 我在同一个句子中用到了Mozilla和XMLHTTP,这里有书面材料可以证明Mozilla支持XMLHTTP。尽管Mozilla的XMLHTTP的语法与Internet Explorer的有一点点不同,少量javascript不能得到处理是无关紧要的。清单C给出了图A所示的完整的客户端解决方案。
图A 服务器端 校验过程在数据库逻辑部分实现。我用DOM进行XML购物车的导航,并用Oracle的存储过程来进行更新以及添加新行的操作——这部分用SQL Server或者MySQL实现并不会有多少实质性的帮助。 改进所带来的好处 XML数据岛的使用使得HTML有了清楚的外观。相对于散布在server端的一行又一行的HTML代码或者嵌入在某个循环中的单行HTML,用XML数据岛只需要使用一行HTML。假如在你即将完成购物车时,有人要求你添加一个数据栏(column),那么维护它就如同噩梦一般,用这种方法就可以免除你的苦恼。 上一篇:创建健壮的页面:ASP中的结构化异常处理 下一篇:ASP:在结果中搜索 更多相关文章
|
推荐文章
精彩文章
|