AJAX

✍ dations ◷ 2025-10-26 04:21:52 #AJAX,Java,XML,Web 2.0新词,进程间通信

AJAX即“Asynchronous JavaScript and XML”(异步的JavaScript与XML技术),指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西·詹姆士·贾瑞特所提出。

传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求。服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML码往往是相同的。由于每次应用的沟通都需要向服务器发送请求,应用的回应时间依赖于服务器的回应时间。这导致了用户界面的回应比本机应用慢得多。

与此不同,AJAX应用可以仅向服务器发送并取回必须的数据,并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少,服务器回应更快了。同时,很多的处理工作可以在发出请求的客户端机器上完成,因此Web服务器的负荷也减少了。

类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。虽然其名称包含XML,但实际上数据格式可以由JSON代替,进一步减少数据量,形成所谓的AJAJ。而客户端与服务器也并不需要异步。一些基于AJAX的“派生/合成”式(derivative/composite)的技术也正在出现,如AFLAX

20世纪90年代,几乎所有的网站都由HTML页面实现,服务器处理每一个用户请求都需要重新加载网页。这样的处理方式效率不高。用户的体验是所有页面都会消失,再重新加载,即使只是一部分页面元素改变也要重新加载整个页面,不仅要刷新改变的部分,连没有变化的部分也要刷新。这会加重服务器的负担。

这可以用异步加载来解决。1995年,JAVA语言的第一版发布,随之发布的的Java applets(JAVA小程序)首次实现了异步加载。浏览器通过运行嵌入网页中的Java applets与服务器交换数据,不必刷新网页。1996年,Internet Explorer将iframe元素加入到HTML,支持局部刷新网页。

1998年前后,Outlook Web Access小组写成了允许客户端脚本发送HTTP请求(XMLHTTP)的第一个组件。该组件原属于微软Exchange Server,并且迅速地成为了Internet Explorer 4.0的一部分。部分观察家认为,Outlook Web Access是第一个应用了Ajax技术的成功的商业应用程序,并成为包括Oddpost的网络邮件产品在内的许多产品的领头羊。但是,2005年初,许多事件使得Ajax被大众所接受。Google在它著名的交互应用程序中使用了异步通讯,如Google讨论组、Google地图、Google搜索建议、Gmail等。Ajax这个词由《》一文所创,该文的迅速流传提高了人们使用该项技术的意识。另外,对Mozilla/Gecko的支持使得该技术走向成熟,变得更为简单易用。

使用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的不恰当处理,都会使用户感到厌烦。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。

JavaScript编程的最大问题来自不同的浏览器对各种技术和标准的支持。

XmlHttpRequest对象在不同浏览器中不同的创建方法,以下是跨浏览器的通用方法:

// Provide the XMLHttpRequest class for IE 5.x-6.x:// Other browsers (including IE 7.x-8.x) ignore this//   when XMLHttpRequest is predefinedvar xmlHttp;if (typeof XMLHttpRequest != "undefined") {    xmlHttp = new XMLHttpRequest();} else if (window.ActiveXObject) {    var aVersions = ;    for (var i = 0; i < aVersions.length; i++) {        try {            xmlHttp = new ActiveXObject(aVersions);            break;        } catch (e) {}    }}

AJAX支持的浏览器有:Internet Explorer、Chrome、Firefox、Opera、Konqueror及Mac OS的Safari。但是Opera不支持XSL格式对象,也不支持XSLT。

对程序员而言,开发Ajax应用最头痛的问题莫过于以下几点:

Ajax是以异步的方式向服务器提交需求。对服务器而言,其与传统的提交窗体需求并无不同,而且由于是以异步之方式提交,如果同时有多个Ajax需求及窗体提交需求,将无法保证哪一个需求先获得服务器的响应。这会造成应用程序典型的多进程(process)或多线程(thread)的竞争(racing)问题。程序员因此必须自行处理或在JavaScript里面动手脚以避免这类竞争问题的发生(如Ajax需求未响应之前,先disable提交按钮),这又不必要的增加了程序员的负担。目前已知有自动处理此问题之开发框架似乎只有ZK。

相关

  • 大肠杆菌大肠杆菌(学名:Escherichia coli,通常简写:E. coli)是人和动物肠道中著名的一种细菌,主要寄生于大肠内,约占肠道菌中的0.1%。大肠杆菌是一种两端钝圆、能运动、无芽孢的革兰氏阴性
  • 补体补体系统(英语:complement system)由一系列的蛋白质组成,属先天免疫系统的一部分。补体系统透过一连串的酵素(酶)相互切割启动,最终在目标微生物上形成类似孔洞的膜攻击复合物(Memb
  • 葡糖苷酶葡糖苷酶(英语:Glucosidases)是催化葡萄糖苷水解的糖苷水解酶,EC编号为3.2.1。其中α-葡糖苷酶是参与将复杂的碳水化合物如淀粉和糖原分解成单体的酶。葡糖苷酶催化各种糖类化合
  • 唐僖宗乾符:874年十一月-879年 广明:880年-881年七月 中和:881年七月-885年三月 光启:885年三月-888年正月唐僖宗李儇(“儇”,拼音:xuān,注音:ㄒㄩㄢ,粤拼:hyun1;862年6月8日-888年4月20日),唐朝第21
  • 能量谱发射光谱是当一个元素被激发(加热)时,在相对于电磁辐射的每一个频率中,某些频率的辐射强度增加的现象。当化学元素中的电子被激发时,它会跃迁至能量较高的轨道上,而当这个电子离开
  • span class=nowrapEr(NOsub3/sub)sub3/sub/span硝酸铒是一种无机化合物,化学式为Er(NO3)3。硝酸铒可以将氧化铒、氢氧化铒或碳酸铒溶于硝酸得到:所得溶液经过小心蒸发可以得到水合硝酸铒,其中六水合物最常见。水合硝酸铒受热
  • 新可乐阴谋论新可口可乐(New Coke)是可口可乐公司在1985年4月23日发售的可口可乐产品的非官方名称,以取代可口可乐的原有配方。在1980年代前期可口可乐的市场份额遭到了百事可乐的追赶,因此
  • 邰肇玫邰肇玫(1958年1月15日-),台湾高雄人,籍贯陕西武功,台湾创作型歌手。1973年进入私立文藻女子外国语文专科学校。在校期间主修英文;副修西班牙文。1977年邰肇玫与文藻语专的同学施碧
  • 波兰统一工人党已消亡已放弃共产主义意识形态已消亡已放弃共产主义意识形态已消亡已放弃共产主义意识形态已消亡已消亡已放弃共产主义意识形态波兰统一工人党(波兰语:Polska Zjednoczona Par
  • 托马·厄泰尔托马·厄泰尔(法语:Thomas Heurtel,1989年4月10日-),法国篮球运动员。在场上的位置是控球后卫。他现在效力于土耳其篮球甲级联赛球队安纳托利亚艾菲斯队。他代表法国国家篮球队参