一种最佳实践是在所有脚本中使用独有的变量和函数名称,具体做法是在每个变量和函数的名称前加上包含它们的portlet的名称。
浏览器战争尚未结束,专有浏览器和基于标准的浏览器之间的战争仍在延续。Ajax相当有趣的一点是,其中有一半是标准(XHTML、XSLT、JavaScript/ECMAScript、DOM和Web services)驱动的。但是其核心技术——XmlHttpRequest对象——来自微软。
下面列出了在进行跨浏览器的Ajax编程时要注意的一些重要的常见错误,以及如何避免这些陷阱。
安全性XmlHttpRequest对象直接把浏览器连接到一台远程主机,要么是加载页面的Web服务器,要么是从另一个完全不同的服务器。正如您所想像的,这里为恶意软件提供了大量的机会。例如,一段恶意的JavaScript可能等着用户输入口令字段,然后把口令传递给一个远程浏览器,而用户却不知道,甚至还没有单击页面上的提交按钮。如果把口令换为信用卡号码,事情就变得更加有趣了。
为了避免这种风险,Mozilla拒绝到为Web页面提供服务的主机之外的任意主机的连接。用户不会看到错误消息,因为它根本就不会运行!
Internet Explorer (IE)采用另一种方法。当要求连接到远程主机时,将使用一个对话框通知用户,而用户可以决定执行什么操作。但是要注意,该对话框不会告诉用户要连接到哪个站点,所以用户缺乏可以用于做出决策的信息。

图 4. 没有有用的信息!
这个问题的解决方案是使用一个Java servlet作为到Web服务的代理。该servlet获得所有的参数,并把它们传递给远程服务,接着将响应返回给Web站点。通过让servlet运行在创建Web页面的Web服务器上,Mozilla就会认为服务是本地的。注意,这是企业服务总线(比如AquaLogic Service Bus)的一个绝好用例。
使用XmlHttpRequest对象包含XmlHttpRequest对象的XmlHttp库最初是随Internet Explorer 4一起发行的ActiveX控件。Mozilla包含一个兼容的函数库,所以没有什么好担心的。我仍然推荐使用一个开源库,比如Sarissa或DWR(An Introduction to Ajax中使用了它)。然而,它们在将XML数据传递到对象的方式上存在着细微的区别。