由于原有的购物车是为一组指定的客户定做的,因此它的使用更多的依赖于使用训练,而没有很好的易用性。除了完全清空购物车之外,没有任何机制来修改你放在购物车里的内容。因此一旦你在购物车中放置的物品或者物品数量有误的话,你不得不重新开始购物过程,只有这样才可以修正这个错误。
除了界面之外,原有的购物车好像没有其它的优点。它只能显示出有限的行数,客户要查看未显示的条目时,必须向前或者向后翻页(即导航)。这个问题归因于购物车中的所有内容都保存在基于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