Ajax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用
现有技术集合的‘新’方法,包括:
HTML 或
XHTML, CSS,
JavaScript,
DOM, XML, XSLT, 以及最重要的
XMLHttpRequest。使用Ajax技术网页应用能够快速地将
增量更新呈现在
用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。
来源
Ajax这个术语源自描述从基于 Web 的应用到基于数据的应用。
Ajax 不是一种新的
编程语言,而是一种用于创建更好更快以及
交互性更强的Web应用程序的技术。
使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象
XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。
Ajax 在浏览器与 Web 服务器之间使用异步
数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。
Ajax 是一种独立于 Web
服务器软件的浏览器技术。 Ajax 基于下列 Web 标准:
JavaScript、XML、HTML与
CSS 在 Ajax 中使用的 Web 标准已被良好定义,并被所有的主流浏览器支持。Ajax 应用程序独立于浏览器和平台。
Web 应用程序较
桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。
不过,因特网应用程序并不像传统的桌面应用程序那样完善且友好。通过 Ajax,因特网应用程序可以变得更完善,更友好。
应用
该技术在 1998 年前后得到了应用。允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件由
Outlook Web Access小组写成。该组件原属于
微软 Exchange Server,并且迅速地成为了 Internet Explorer 4.0 的一部分。部分观察家认为,Outlook Web Access 是第一个应用了 Ajax 技术的成功的商业应用程序,并成为包括Oddpost 的网络邮件产品在内的许多产品的
领头羊。但是,2005 年初,许多事件使得 Ajax 被大众所接受。Google 在它著名的交互应用程序中使用了异步通讯,如
Google、Google 地图、Google 搜索建议、
Gmail等。Ajax 这个词由《Ajax: A New Approach to Web Applications》一文所创,该文的迅速传播加强了人们使用该项技术的意识。另外,对Mozilla/
Gecko 的支持使得该技术走向成熟,变得更为易用。
Ajax 前景非常乐观,可以提高
系统性能,优化
用户界面。Ajax 现有直接框架 AjaxPro,可以引入 AjaxPro.2
.dll 文件,可以直接在前台页面 JavaScript 调用后台页面的方法。但此框架与
表单验证有冲突。另外
微软也引入了 Ajax 组件,需要添加 AjaxControlToolkit.dll 文件,可以在控件列表中出现相关控件。
发展
许多重要的技术和 Ajax 开发模式可以从现有的知识中获取。例如,在一个发送请求到
服务端的应用中,必须包含请求顺序、
优先级、超时响应、
错误处理及回调,其中许多元素已经在Web 服务中包含了。同时,随着技术的成熟还会有许多地方需要改进,特别是
UI部分的易用性。
Ajax 开发与传统的
B/S开发有很大的不同。这些不同引入了新的编程问题,最大的问题在于易用性。由于 Ajax 依赖浏览器的
JavaScript 和XML,浏览器的
兼容性和支持的标准也变得和 JavaScript 的
运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合,因此必须理解如何才能最好的使用这些技术。
综合各种变化的技术和
强耦合的客户服务端环境,Ajax 提出了一种新的
开发方式。Ajax 开发人员必须理解传统的
MVC 架构,这限制了应用层次之间的边界。同时,开发人员还需要考虑 B/S 环境的外部和使用 Ajax 技术来重定型 MVC 边界。最重要的是,Ajax 开发人员必须禁止以页面集合的方式来考虑 Web 应用而需要将其认为是单个页面。一旦 UI 设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。
特点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息。
Ajax不需要任何
浏览器插件,但需要用户允许
JavaScript在浏览器上执行。就像
DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的
程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持
JavaScript的用户提供替代功能。
对应用Ajax最主要的批评就是,它可能破坏浏览器的后退与加入收藏书签功能。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下
历史记录中的
静态页面。一个被完整读入的页面与一个已经
被动态修改过的页面之间的可能差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,HTML5之前的方法大多是在用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的
IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态)。
关于无法将状态加入收藏或书签的问题,HTML5之前的一种方式是使用URL片断
标识符(通常被称为
锚点,即URL中#后面的部分)来保持追踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)HTML5以后可以
直接操作浏览历史,并以
字符串形式存储网页状态,将网页加入网页
收藏夹或书签时状态会被隐形地保留。上述两个方法也可以同时解决无法后退的问题。
进行Ajax开发时,
网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。如果不给予用户明确的回应,没有恰当的预读数据,或者对XMLHttpRequest的不恰当处理,都会使用户感到厌烦。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。