词条 | ajax |
释义 | 1 一种网页开发技术读音:e:j^ks 。AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。 开发框架(主要包含的技术 JavaScript XMLHttpRequest CSS 服务器端) 优点和缺点(优点:更迅捷的响应速度 缺点与其中一些问题的对应解决方案) 基础应用(创建XMLHttpRequest 方法 发送请求 服务器的响应 处理从服务器得到的数据) 应用程序架构(1纯Javascript:应用程序框架 2 纯Javascript:基础结构框架 3 服务器端:多种语言 4 服务器端:Java 5 服务器端:Lisp 6 服务器端:.NET 7 服务器端:PHP 8 服务器端:Ruby) 实例展示(XMLHttpRequest 对象 AJAX Http 请求 您的第一个 AJAX 应用程序 AJAX 浏览器支持 onreadystatechange 属性 responseText 属性 AJAX - 向服务器发送一个请求 AJAX - 服务器端的脚本 运行您的 AJAX 应用程序) ◎ 名称来源AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML)。 国内翻译常为“阿贾克斯”和阿贾克斯足球队同音。Web应用的交互如Flickr,Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于Web的应用到基于数据的应用的转换。在基于数据的应用中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。 Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。 ◎ 应用优势AJAX 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。 通过 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据。 AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。 AJAX 可使因特网应用程序更小、更快,更友好。 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文件,可以直接在前台页面JS调用后台页面的方法。但此框架与FORM验证有冲突。另外微软也引入了AJAX组件,需要添加AjaxControlToolkit.dll文件,可以在控件列表中出现相关控件。 ◎ 开发模式许多重要的技术和AJAX开发模式可以从现有的知识中获取。例如,在一个发送请求到服务端的应用中,必须包含请求顺序、优先级、超时响应、错误处理及回调,其中许多元素已经在Web服务中包含了,就像现在的SOA。AJAX开发人员拥有一个完整的系统架构知识。同时,随着技术的成熟还会有许多地方需要改进,特别是UI部分的易用性。 AJAX开发与传统的CS开发有很大的不同。这些不同引入了新的编程问题,最大的问题在于易用性。由于AJAX依赖浏览器的JavaScript和XML,浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合,因此必须理解如何才能最好的使用这些技术。 综合各种变化的技术和强耦合的客户服务端环境,AJAX提出了一种新的开发方式。AJAX开发人员必须理解传统的MVC架构,这限制了应用层次之间的边界。同时,开发人员还需要考虑CS环境的外部和使用AJAX技术来重定型MVC边界。最重要的是,AJAX开发人员必须禁止以页面集合的方式来考虑Web应用而需要将其认为是单个页面。一旦UI设计与服务架构之间的范围被严格区分开来后,开发人员就需要更新和变化的技术集合了。 ◎ 开发框架随着AJAX迅速地引人注目起来,我想开发人员对这种技术的期待也迅速地增加。就像任何新技术,AJAX的兴旺也需要一整个开发工具/编程语言及相关技术系统来支撑。 ◎ 主要包含的技术基web标准(standards-based presentation)XHTML+CSS的表示; 使用 DOM(Document Object Model)进行动态显示及交互; 使用 XML 和 XSLT 进行数据交换及相关操作; 使用 XMLHttpRequest 进行异步数据查询、检索; 使用 JavaScript 将所有的东西绑定在一起。英文参见Ajax的提出者Jesse James Garrett的原文,原文题目(Ajax: A New Approach to Web Applications)。 类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。 AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括: Google Chrome、Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。 ◎ JavaScript如名字所示,AJAX的概念中最重要而最易被忽视的是它也是一种JavaScript编程语言。JavaScript是一种粘合剂使AJAX应用的各部分集成在一起。在大部分时间,JavaScript通常被服务端开发人员认为是一种企业级应用不需要使用的东西应该尽力避免。这种观点来自以前编写JavaScript代码的经历:繁杂而又易出错的语言。类似的,它也被认为将应用逻辑任意地散布在服务端和客户端中,这使得问题很难被发现而且代码很难重用。在AJAX中JavaScript主要被用来传递用户界面上的数据到服务端并返回结果。XMLHttpRequest对象用来响应通过HTTP传递的数据,一旦数据返回到客户端就可以立刻使用DOM将数据放到网面上。 ◎ XMLHttpRequestXMLHttpRequest对象在大部分浏览器上已经实现而且拥有一个简单的接口允许数据从客户端传递到服务端,但并不会打断用户当前的操作。使用XMLHttpRequest传送的数据可以是任何格式,虽然从名字上建议是XML格式的数据。 开发人员应该已经熟悉了许多其他XML相关的技术。XPath可以访问XML文档中的数据,但理解XML DOM是必须的。类似的,XSLT是最简单而快速的从XML数据生成HTML或XML的方式。许多开发人员已经熟悉Xpath和XSLT,因此AJAX选择XML作为数据交换格式是有意义的。XSLT可以被用在客户端和服务端,它能够减少大量的用JavaScript编写的应用逻辑。 ◎ CSS为了正确的浏览AJAX应用,CSS是一种AJAX开发人员所需要的重要武器。CSS提供了从内容中分离应用样式和设计的机制。虽然CSS在AJAX应用中扮演至关重要的角色,但它也是构建跨浏览器应用的一大阻碍,因为不同的浏览器厂商支持各种不同的CSS级别。 ◎ 服务器端但不像在客户端,在服务端AJAX应用还是使用建立在如Java,.Net和PHP语言基础上机制;并没有改变这个领域中的主要方式。 既然如此,我们对Ruby on Rails框架的兴趣也就迅速增加了。在一年多以前,Ruby on Rails已经吸引了大量开发人员基于其强大功能来构建Web和AJAX应用。虽然目前还有很多快速应用开发工具存在,Ruby o n Rails看起来已经储备了简化构建AJAX应用的能力。 ◎ 调试与兼容◎ 调试问题在实际构建AJAX应用中,你需要的不只是文本编辑器。既然JavaScript是非编译的,它可以容易地编写和运行在浏览器中。然而,许多工具提供了有用的扩展如语法高亮和智能完成。 不同的IDE提供了对JavaScript支持的不同等级。来自JetBrains的IntelliJ IDEA是一个用来JavaScript开发的更好的IDE,虽然许多开发人员也喜欢Microsoft’s Visual Studio产品(允诺会在最新的版本中改善对AJAX的支持)。Eclipse包含了两个免费的JavaScript编辑器插件和一个商业的来自ActiveStat的Komodo IDE。 另一个JavaScript和AJAX开发中的问题是调试困难。不同的浏览器提供不同的通常是隐藏的运行时错误信息,而JavaScript的缺陷如双重变量赋值(通常是由于缺少数据类型)使得调试更加困难。在AJAX的开发中,调试就更复杂了,因为其需要标识究竟是客户端还是服务端产生的错误。在过去,JavaScript调试的方法是删除所有代码然后一行行的增加直到错误出现。现在,更多开发人员回到为IE准备的Microsoft Script Debugger和为Mozilla浏览器准备的Venkman。 ◎ 浏览器兼容性JavaScript编程的最大问题来自不同的浏览器对各种技术和标准的支持。构建一个运行在不同浏览器(如IE和火狐)是一个困难的任务。因此几种AJAX JavaScript框架或者生成基于服务端逻辑或标记库的JavaScript,或者提供符合跨浏览器AJAX开发的客户端JavaScript库。一些流行的框架包括:Jquery,Backbase,Bitkraft,Django,DOJO,DWR,MochiKit,Prototype,Rico,Sajax,Sarissa,and Script. 这些框架给开发人员更多的空间使得他们不需要担心跨浏览器的问题。虽然这些框架提升了开发人员构建应用的能力,但由于厂商已经开发了更细节的用户界面的打包组件解决方案,因此在AJAX组件市场中需要考虑一些其他因素。例如提供通用用户界面的组件如组合框和数据栅格的几个厂商,都可以被用来在应用中创建良好的通过类似电子数据表方式来查看和编辑数据的体验。但这些组件不仅是封装了组件的用户界面而且包括与服务端数据的通讯方式,这些组件通常使用基于标记方式来实现如或JSF控件。 ◎ 示例程序将以下文本放入一个HTML页面即可看到效果,将会有两次弹出提示,最后在页面上显示YES,表示完成 <SCRIPT LANGUAGE="JavaScript"> <!-- function ajaxByJyking(){ var xmlhttp_request = ""; try{ if( window.ActiveXObject ){ for( var i = 5; i; i-- ){ try{ if( i == 2 ){ xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); } else{ xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); xmlhttp_request.setRequestHeader("Content-Type","text/xml"); xmlhttp_request.setRequestHeader("Charset","gb2312"); } break;} catch(e){ xmlhttp_request = false; } } } else if( window.XMLHttpRequest ) { xmlhttp_request = new XMLHttpRequest(); if (xmlhttp_request.overrideMimeType) { xmlhttp_request.override.MimeType('text/xml'); } } } catch(e){ xmlhttp_request = false; } xmlhttp_request.open('GET','http://www.',true); xmlhttp_request.send(null); xmlhttp_request.onreadystatechange = function(){ if (xmlhttp_request.readyState == 4) { // 收到完整的服务器响应 document.write("yes") } else{ alert(1) } } } ajaxByJyking(); //--> </SCRIPT> ◎ 优点和缺点◎ 优点:更迅捷的响应速度传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然後返回一个新的网页。这个做法浪费了许多带宽,因为在前後两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。 与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的web service接口,并在客户端采用JavaScript处理来自服务器的响应。因此在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。 使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。 Ajax不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。就像DHTML应用程序那样,Ajax应用程序必须在众多不同的浏览器和平台上经过严格的测试。随着Ajax的成熟,一些简化Ajax使用方法的程序库也相继问世。同样,也出现了另一种辅助程序设计的技术,为那些不支持JavaScript的用户提供替代功能。 ◎ 缺点与其中一些问题的对应解决方案对应用Ajax最主要的批评就是,它可能破坏浏览器后退按钮的正常行为。在动态更新页面的情况下,用户无法回到前一个页面状态,这是因为浏览器仅能记下历史记录中的静态页面。一个被完整读入的页面与一个已经被动态修改过的页面之间的差别非常微妙;用户通常都希望单击后退按钮,就能够取消他们的前一次操作,但是在Ajax应用程序中,却无法这样做。不过开发者已想出了种种办法来解决这个问题,当中大多数都是在用户单击后退按钮访问历史记录时,通过建立或使用一个隐藏的IFRAME来重现页面上的变更。(例如,当用户在Google Maps中单击后退时,它在一个隐藏的IFRAME中进行搜索,然后将搜索结果反映到Ajax元素上,以便将应用程序状态恢复到当时的状态。) 一个相关的观点认为,使用动态页面更新使得用户难于将某个特定的状态保存到收藏夹中。该问题的解决方案也已出现,大部分都使用URL片断标识符(通常被称为锚点,即URL中#后面的部分)来保持跟踪,允许用户回到指定的某个应用程序状态。(许多浏览器允许JavaScript动态更新锚点,这使得Ajax应用程序能够在更新显示内容的同时更新锚点。)这些解决方案也同时解决了许多关于不支持后退按钮的争论。 进行Ajax开发时,网络延迟——即用户发出请求到服务器发出响应之间的间隔——需要慎重考虑。不给予用户明确的回应 ,没有恰当的预读数据 ,或者对XMLHttpRequest的不恰当处理,都会使用户感到延迟,这是用户不欲看到的,也是他们无法理解的。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。 一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax; 用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是让人头痛的事; Ajax的无刷新重载,由于页面的变化没有刷新重载那么明显,所以容易给用户带来困扰――用户不太清楚现在的数据是新的还是已经更新过的;现有的解决有:在相关位置提示、数据更新的区域设计得比较明显、数据更新后给用户提示等; 对串流媒体的支持没有FLASH、Java Applet好; ◎ 基础应用◎ 创建XMLHttpRequest 方法XMLHttpRequest 类首先由Internet Explorer以ActiveX对象引入,被称为XMLHTTP。后来Mozilla﹑Netscape﹑Safari 和其他浏览器也提供了XMLHttpRequest类,不过它们创建XMLHttpRequest类的方法不同。 对于Internet Explorer浏览器: xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP.3.0"); //3.0或4.0,5.0 xmlhttp_request = new ActiveXObject("Msxml2.XMLHTTP"); xmlhttp_request = new ActiveXObject("Microsoft.XMLHTTP"); 由于在不同Internet Explorer浏览器中XMLHTTP版本可能不一致,为了更好的兼容不同版本的Internet Explorer浏览器,因此我们需要根据不同版本的Internet Explorer浏览器来创建XMLHttpRequest类,上面代码就是根据不同的Internet Explorer浏览器创建XMLHttpRequest类的方法。 对于Mozilla﹑Netscape﹑Safari等浏览器 创建XMLHttpRequest 方法如下:xmlhttp_request = new XMLHttpRequest(); 如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作。为了解决这个问题,如果服务器响应的header不是text/xml,可以调用其它方法修改该header。 xmlhttp_request = new XMLHttpRequest(); xmlhttp_request.overrideMimeType('text/xml'); 在实际应用中,为了兼容多种不同版本的浏览器,一般将创建XMLHttpRequest类的方法写成如下形式: try{ if( window.ActiveXObject ){ for( var i = 5; i; i-- ){ try{ if( i == 2 ){ xmlhttp_request = new ActiveXObject( "Microsoft.XMLHTTP" ); } else{ xmlhttp_request = new ActiveXObject( "Msxml2.XMLHTTP." + i + ".0" ); xmlhttp_request.setRequestHeader("Content-Type","text/xml"); xmlhttp_request.setRequestHeader("Charset","gb2312"); } break;} catch(e){ xmlhttp_request = false; } } } else if( window.XMLHttpRequest ) { xmlhttp_request = new XMLHttpRequest(); if (xmlhttp_request.overrideMimeType) { xmlhttp_request.overrideMimeType('text/xml'); } } } catch(e){ xmlhttp_request = false; } ◎ 发送请求可以调用HTTP请求类的open()和send()方法,如下所示: xmlhttp_request.open('GET',URL,true); xmlhttp_request.send(null); open()的第一个参数是HTTP请求方式—GET,POST或任何服务器所支持的您想调用的方式。按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求。 第二个参数是请求页面的URL。 第三个参数设置请求是否为异步模式。如果是TRUE,JavaScript函数将继续执行,而不等待服务器响应。这就是"AJAX"中的"A"。 ◎ 服务器的响应这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应。可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示: xmlhttp_request.onreadystatechange =FunctionName; FunctionName是用JavaScript创建的函数名,注意不要写成FunctionName(),当然我们也可以直接将JavaScript代码创建在onreadystatechange之后,例如: xmlhttp_request.onreadystatechange = function(){ // JavaScript代码段 }; 首先要检查请求的状态。只有当一个完整的服务器响应已经收到了,函数才可以处理该响应。XMLHttpRequest 提供了readyState属性来对服务器响应进行判断。 readyState的取值如下: 0 (未初始化) 1 (正在装载) 2 (装载完毕) 3 (交互中) 4 (完成) 所以只有当readyState=4时,一个完整的服务器响应已经收到了,函数才可以处理该响应。具体代码如下: if (http_request.readyState == 4) { // 收到完整的服务器响应 } else { // 没有收到完整的服务器响应 } 当readyState=4时,一个完整的服务器响应已经收到了,接着,函数会检查HTTP服务器响应的状态值。完整的状态取值可参见W3C文档。当HTTP服务器响应的值为200时,表示状态正常。 ◎ 处理从服务器得到的数据有两种方式可以得到这些数据: (1) 以文本字符串的方式返回服务器的响应 (2) 以XMLDocument对象方式返回响应 ◎ 应用程序架构◎ 1纯Javascript:应用程序框架1.1 Bindows(自从2003年) 它,通过强力联合DHTML,JavaScript,CSS和XML等技术,能生成高度交互的互联网应用程序-成为现代的桌面应用程序的强有力对手。Bindows应用程序不要求下载和也不需要在用户端安装-仅要求有一个浏览器(也不需要Java,Flash或者ActiveX)。Bindows有可能领导面向对象开发的AJAX应用程序的平台。 1.2 BackBase(自从2003年) 网址是:,是一个全面的浏览器端框架,支持丰富的浏览器功能以及与.NET和Java的集成。 ·商业化,来自于Backbase B.V(总部在Amsterdam,成立于2003年)。 1.3 DOJO(开发中;自从2004年9月) 网址是:/,提供全面窗口小组件和浏览器-服务器消息支持。 ·为创建定制的Javascript窗口小组件提供框架支持。 1.4 Open Rico(开发中;自从2005年5月;基于早期的私有框架) 网址是:,是一多用途框架,支持Ajax基础结构和用户交互。 1.5 qooxdoo(开发中;自从2005年5月) 网址是:,是另一个雄心勃勃的框架,提供宽范围的UI支持和正在开发中的基础结构特性。 1.6 Tibet(开发中;自从2005年6月) 网址是:,目的是提供高度可移植的和全面的Javascript API,结果是,可能自动生成大量的客户端代码。自称是"企业级Ajax"。 ◎ 2 纯Javascript:基础结构框架2.1 AjaxCaller(Alpha版本;自从2005年5月) 网址是:,是一基本的线程安全的XMLHttpRequest包装器,主要针对Ajax新手,仍处于原始的alpha开发阶段, 2.2 Flash JavaScript集成包 网址是:,允许JavaScript和Flash内容的集成 2.3 Google AJAXSLT(发行于2005年6月) 网址是:,是一个Javascript框架,用来执行XSLT转换以及XPath查询。 2.4 HTMLHttpRequest(Beta版;始于2005年) HtmlHttpRequest(),它使用了XMLHttpRequest和Iframes以改进兼容性。 2.5 交互式网站框架(自从2005年5月) 交互式网站框架,是一个项目,目的是从浏览器端对Ajax基础结构的多方面予以支持。自描述为"使用javascript,css,xml,和html来创造高度交互网站的框架。包括一个定制的针对高度可读的javascript的xml分析器。实质上,是建立基于AJAX的网站的基础,还有另外一些通用脚本"。 2.6 LibXMLHttpRequest(发行于2003年6月) /connector?file=reference/2003/06/17/libXmlRequest.html),是XMLHttpRequest的一个瘦包装器。 2.7 RSLite(x) 网站是:http/rs/main.htm,是一个针对XMLHttpRequest的瘦包装器。 2.8 Sack(在开发中,自从2005年5月) 网站是:/2005/05/sack-of-ajax/,是一个针对XMLHttpRequest的瘦包装器。 2.9 Sarissa(发行于2003年,2月) 网站是:http,是一种Javascript API,它封装了在浏览器端可以独立调用XML的功能。 2.10 XHConn(发行于自从2005年,4月) 网站是:/javascript/XHConn/,是一个对XMLHttpRequest的瘦包装器。 2.11 Jquery 简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。 ◎ 3 服务器端:多种语言3.1 跨平台异步的接口工具箱(2005年5月) CPAINT:,是一真正的支持PHP和ASP/Vbscript的Ajax实现和JSRS(JavaScript远程脚本)实现。CPAINT提供给你需求的代码在后台实现AJAX和JSRS,而返回的数据以JavaScript形式在前台操作,格式化和显示。这允许你创建能提供接近实时的反馈给用户的web应用程序。 3.2 SAJAX(可用,但是不是1.0版本;自从2005年3月) 网站是:http:///sajax/,直接把调用从Javascript发送到你的服务器端语言并再次回返。 3.3 Javascipt对象标志(JSON)和JSON-RPC JSON(http/index.html),是一个"胖的自由的XML选择",而JSON-RPC(/)是一种远程过程协议,类似于XML-RPC,强有力支持Javascript客户。 3.4 Javascript远程脚本(JSRS)(自从2000年) 网址是:http/test.htm,直接把调用从Javascript发送到你的服务器端语言并再次回返。 ◎ 4 服务器端:Java4.1 WebORB for Java(自从2005年8月) 网址:http://weborb/aboutWeborb.htm,是一个平台,支持开发AJAX和基于Flash的胖客户端应用程序,并可以把它们与Java对象和XML Web服务相系起来。在线举例(http) 4.2 Echo 2(自从2005年3月) 网址是:http:///,允许你用纯Java代码编写Ajax应用软件(范例(http://demo./ia))。 4.3 Direct Web Remoting (DWR)(2005年) 网址是:http/,是一个框架,用于直接从Javascript代码中调用Java方法。 4.4 SWATO(2005年) 网址是/,是一套可重用的和良好集成的Java/JavaScript库,它实现了一种更容易的方式来改变你的web应用程序的交互,它是通过AJAX方式实现。 ◎ 5 服务器端:Lisp5.1 CL-Ajax 网址,实现Javascript直接调用服务器端Lisp函数。 ◎ 6 服务器端:.NET6.1 WebORB(自从2005年8月) 网址:/aboutWeborb.htm,是一个平台,用于开发AJAX和基于Flash的胖客户端应用程序,并能把它们连接到.NET对象和XML Web服务。(在线举例(http://)) 6.2(自从2005年3月) 网址是:http/,是一个库,实现从Javascript到服务器端.NET的存取。 ◎ 7 服务器端:PHP7.1 AjaxAC(自从2005年4月) 网址是:/,用单个的PHP类封装了完整的应用程序。 7.2 JPSpan 网址是:http,直接把Javascript调用传递到PHP函数。 7.3 XAJAX 网址是:http,直接把Javascript调用传递到PHP函数。 ◎ 8 服务器端:RubyRuby On Rails/)是一个通常的强力支持Ajax的web框架: ◎ 实例展示◎ XMLHttpRequest 对象通过使用 XMLHttpRequest 对象,web 开发者可以做到在页面已加载后从服务器更新页面! 在 2005 年 AJAX 被 Google 推广开来(Google Suggest)。 Google 建议使用 XMLHttpRequest 对象来创建一种动态性极强的 web 界面:当您开始在 Google 的搜索框中输入查询时,JavaScript 会向某个服务器发出这些字词,然后服务器会返回一系列的搜索建议。 XMLHttpRequest 对象得到下列浏览器的支持:Internet Explorer 5.0+、Safari 1.2、Mozilla 1.0 / Firefox、Opera 8+ 以及 Netscape 7。 ◎ AJAX Http 请求Previous PageNext Page AJAX 使用 Http 请求 在传统的 JavaScript 编程中,假如您希望从服务器上的文件或数据库中得到任何的信息,或者向服务器发送信息的话,就必须利用一个 HTML 表单向服务器 GET 或 POST 数据。而用户则需要单击“提交”按钮来发送/获取信息,等待服务器的响应,然后一张新的页面会加载结果。 由于每当用户提交输入后服务器都会返回一张新的页面,传统的 web 应用程序变得运行缓慢,且越来越不友好。 通过利用 AJAX,您的 JavaScript 会通过 JavaScript 的 XMLHttpRequest对象,直接与服务器来通信。 通过使用 HTTP 请求,web 页可向服务器进行请求,并得到来自服务器的响应,而不加载页面。用户可以停留在同一个页面,他或她不会注意到脚本在后台请求过页面,或向服务器发送过数据。 ◎ 您的第一个 AJAX 应用程序为了让您理解 AJAX 的工作原理,我们将创建一个小型的 AJAX 应用程序。 首先,我们需要一个带有两个文本框的 HTML 表单:用户名和时间。用户名文本框由用户填写,而时间文本框使用 AJAX 进行填写。 此 HTML 文件名为 "testAjax.htm"(请注意这个 HTML 表单没有提交按钮!): <html> <body> <form name="myForm"> 用户: <input type="text" name="username" /> 时间: <input type="text" name="time" /> </form> </body> </html>;我们将在下一节解释 AJAX 的基本原理。 ◎ AJAX 浏览器支持Previous PageNext Page AJAX - 浏览器支持 AJAX 的要点是 XMLHttpRequest 对象。 不同的浏览器创建 XMLHttpRequest 对象的方法是有差异的。 IE 浏览器使用 ActiveXObject,而其他的浏览器使用名为 XMLHttpRequest的 JavaScript 内建对象。 如需针对不同的浏览器来创建此对象,我们要使用一条 "try and catch" 语句。您可以在我们的 JavaScript 教程中阅读更多有关 try 和 catch 语句的内容。 让我们用这段创建 XMLHttpRequest 对象的 JavaScript 来更新一下我们的 "testAjax.htm" 文件:<html> <body> <script type="text/javascript"> function ajaxFunction() { var xmlHttp; try { // Firefox,Opera 8.0+,Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("您的浏览器不支持AJAX!"); return false; } } } } </script> <form name="myForm"> 用户: <input type="text" name="username" /> 时间: <input type="text" name="time" /> </form></body> </html> 例子解释: 首先声明一个保存 XMLHttpRequest 对象的 xmlHttp 变量。 然后使用 XMLHttp=new XMLHttpRequest() 来创建此对象。这条语句针对 Firefox、Opera 以及 Safari 浏览器。假如失败,则尝试针对 Internet Explorer 6.0+ 的 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"),假如也不成功,则尝试针对 Internet Explorer 5.5+ 的 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")。 假如这三种方法都不起作用,那么这个用户所使用的浏览器已经太过时了,他或她会看到一个声明此浏览器不支持 AJAX 的提示。 注释:上面这些浏览器定制的代码很长,也很复杂。不过,每当您希望创建 XMLHttpRequest 对象时,这些代码就能派上用场,因此您可以在任何需要使用的时间拷贝粘贴这些代码。上面这些代码兼容所有的主流浏览器:Internet Explorer、Opera、Firefox 以及 Safari。 下一节为您展示如何使用 XMLHttpRequest 对象与服务器进行通信。 AJAX - XMLHttpRequest 对象 Previous PageNext Page AJAX - 更多有关 XMLHttpRequest 对象的知识 在向服务器发送数据之前,我们有必要解释一下 XMLHttpRequest 对象的三个重要的属性。 ◎ onreadystatechange 属性onreadystatechange 属性存有处理服务器响应的函数。下面的代码定义一个空的函数,可同时对 onreadystatechange 属性进行设置: xmlHttp.onreadystatechange=function() { // 我们需要在这里写一些代码 } readyState 属性 readyState 属性存有服务器响应的状态信息。每当 readyState 改变时,onreadystatechange 函数就会被执行。 这是 readyState 属性可能的值: ? ? 0 请求未初始化(在调用 open() 之前) 1 请求已提出(调用 send() 之前) 2 请求已发送(这里通常可以从响应得到内容头部) 3 请求处理中(响应中通常有部分数据可用,但是服务器还没有完成响应) 4 请求已完成(可以访问服务器响应并使用它) 我们要向这个 onreadystatechange 函数添加一条 If 语句,来测试我们的响应是否已完成(意味着可获得数据): xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { // 从服务器的response获得数据 } } ◎ responseText 属性可以通过 responseText 属性来取回由服务器返回的数据。 在我们的代码中,我们将把时间文本框的值设置为等于 responseText: xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.time.value=xmlHttp.responseText; } } 下一节,我们会介绍如何向服务器请求数据! AJAX - 请求服务器 Previous PageNext Page ◎ AJAX - 向服务器发送一个请求要想把请求发送到服务器,我们就需要使用 open() 方法和 send() 方法。 open() 方法需要三个参数。第一个参数定义发送请求所使用的方法(GET 还是 POST)。第二个参数规定服务器端脚本的 URL。第三个参数规定应当对请求进行异步地处理。 send() 方法可将请求送往服务器。如果我们假设 HTML 文件和 ASP 文件位于相同的目录,那么代码是这样的: xmlHttp.open("GET","time.asp",true); xmlHttp.send(null); 现在,我们必须决定何时执行 AJAX 函数。当用户在用户名文本框中键入某些内容时,我们会令函数“在幕后”执行。 <html> <body> <script type="text/javascript"> function ajaxFunction() { var xmlHttp; try { // Firefox,Opera 8.0+,Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("您的浏览器不支持AJAX!"); return false; } } } xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4) { document.myForm.time.value=xmlHttp.responseText; } } xmlHttp.open("GET","time.asp",true); xmlHttp.send(null); } </script> <form name="myForm"> 用户: <input type="text" name="username" onkeyup="ajaxFunction();" /> 时间: <input type="text" name="time" /> </form> </body> </html> 下一节介绍 "time.asp" 的脚本,这样我们完整的 AJAX 应用程序就搞定了。 AJAX -服务器端的脚本 Previous PageNext Page ◎ AJAX - 服务器端的脚本现在,我们要创建可显示当前服务器时间的脚本。 responseText 属性会存储从服务器返回的数据。在这里,我们希望传回当前的时间。 这是 "time.asp" 的代码: <% response.expires=-1response.write(time)%> 注释:Expires 属性可设置在页面缓存失效前页面被缓存的时间(分钟)。Response.Expires=-1 指示页面不会被缓存。 ◎ 运行您的 AJAX 应用程序请在下面的文本框中键入一些文本,然后单击时间文本框: 用户: 时间: 时间文本框可在不加载页面的情况下从 "time.asp" 获得服务器的时间! ◎ 问题及对策◎ 浏览器的兼容性问题Ajax在本质上是一个浏览器端的技术,首先面临无可避免的第一个问题即是浏览器的兼容性问题。各家浏览器对于JavaScript/DOM/CSS的支持总有部分不太相同或是有Bug,甚至同一浏览器的各个版本间对于JavaScript/DOM/CSS的支持也有可能部分不一样。这导致程序员在写Ajax应用时花大部分的时间在调试浏览器的兼容性而非在应用程序本身。因此,目前大部分的Ajax链接库或开发框架大多以js链接库的形式存在,以定义更高阶的JavaScript API 、JavaScript对象(模板)、或者JavaScript Widgets来解决此问题。如prototype.js。 ◎ 业务逻辑分散Ajax技术之主要目的在于局部交换客户端及服务器之间的数据。如同传统之主从架构,无可避免的会有部分的业务逻辑会实现在客户端,或部分在客户端部分在服务器。由于业务逻辑可能分散在客户端及服务器,且以不同之程序语言实现,这导致Ajax应用程序极难维护。如有用户接口或业务逻辑之更动需求,再加上前一个JavaScript/DOM/CSS之兼容性问题,Ajax应用往往变成程序员的梦魇。针对业务逻辑分散的问题,Ajax开发框架大致可分为两类: [1]将业务逻辑及表现层放在浏览器,数据层放在服务器:因为所有的程序以JavaScript执行在客户端,只有需要数据时才向服务器要求服务,此法又称为胖客户端(fat client)架构。服务器在此架构下通常仅用于提供及储存数据。此法的好处在于程序员可以充分利用JavaScript搭配业务逻辑来做出特殊的用户接口,以符合终端用户的要求。但是问题也不少,主因在第一,JavaScript语言本身之能力可能不足以处理复杂的业务逻辑。第二,JavaScript的执行效能一向不好。第三,JavaScript访问服务器数据,仍需适当的服务器端程序之配合。第四,浏览器兼容性的问题又出现。有些Ajax开发框架如DWR企图以自动生成JavaScript之方式来避免兼容的问题,并开立通道使得JavaScript可以直接调用服务器端的Java程序来简化数据的访问。但是前述第一及第二两个问题仍然存在,程序员必须费相当的力气才能达到应用程序之规格要求,或可能根本无法达到要求。 [2]将表现层、业务逻辑、及数据层放在服务器,浏览器仅有用户接口引擎(User Interface engine);此法又称为瘦客户端(thin client)架构,或中心服务器(server-centric)架构。浏览器的用户接口引擎仅用于反映服务器的表现层以及传达用户的输入回到服务器的表现层。由浏览器所触发之事件亦送回服务器处理,根据业务逻辑来更新表现层,然后反映回浏览器。因为所有应用程序完全在服务器执行,数据及表现层皆可直接访问,程序员只需使用服务器端相对较成熟之程序语言(如Java语言)即可,不需再学习JavaScript/DOM/CSS,在开发应用程序时相对容易。缺点在于用户接口引擎以及表现层通常以标准组件的形式存在,如需要特殊组件(用户接口)时,往往须待原框架之开发者提供,缓不济急。如开源码Ajax开发框架ZK目前支持XUL及XHTML组件,尚无XAML之支持。 ◎ 多进程或多线程的竞争问题Ajax是以异步的方式向服务器提交需求。对服务器而言,其与传统的提交窗体需求并无不同,而且由于是以异步之方式提交,如果同时有多个Ajax需求及窗体提交需求,将无法保证哪一个需求先获得服务器的响应。这会造成应用程序典型的多进程(process)或多线程(thread)的竞争(racing)问题。程序员因此必须自行处理或在JavaScript里面动手脚以避免这类竞争问题的发生(如Ajax需求未响应之前,先disable送出按钮),这又不必要的增加了程序员的负担。目前已知有自动处理此问题之开发框架似乎只有ZK。 2 著名希腊史诗伊利亚特中英雄埃阿斯的名字Ajax:伊利亚特中英雄埃阿斯的名字。 Ajax是《荷马史诗》中的一个重要人物,在《荷马史诗》中,他是一位令人生畏的战士(也是一个国王,埃亚希德王朝的末裔),参加了著名的特洛伊战役,他的勇猛仅次于阿喀琉斯,在诸英雄中名列第二。 在荷马史诗中他被描述成一位强大到不可思议的战士。荷马把埃阿斯比成墙壁,并描述他装备着一块7层厚牛皮制成的盾牌。与其他英雄不同,他并不是为援助神或超自然力量而战斗。 据公元前4世纪作家索福克莱斯记述,阿喀琉斯(大埃阿斯表兄弟、《伊利亚特》中的头号英雄)临死前嘱咐要把他的盔甲送给最勇猛的战士,埃阿斯与奥德修斯(尤里西斯)成为最具竞争力的人选。但最终奥德修斯凭智慧取胜并得到盔甲。埃阿斯悲伤至极,无法自拔,最终结束了自己的生命。 3 著名足球俱乐部阿贾克斯荷兰著名足球俱乐部阿贾克斯,以培养青年球员而著称,并多次夺得欧洲冠军杯。 阿贾克斯·阿姆斯特丹足球俱乐部(Amsterdamsche Football Club Ajax,简称Ajax Amsterdam,AFC Ajax 及 Ajax,Euronext: AJAX),创立于1900年,是一支位于荷兰阿姆斯特丹的著名足球俱乐部。根据俱乐部历史是世界上最成功的十家俱乐部之一,现时是荷兰最成功及最受欢迎的俱乐部,和费耶诺德以及埃因霍温并称荷兰足球三强。阿贾克斯被誉为世界第一的球星加工厂,其青训系统培养大量球星。 阿贾克斯球员过去往往成为国家队的重心球员,包括约翰·克鲁伊夫(Johan Cruyff)、马尔科·范巴斯滕(Marco van Basten)等。 中文队名:阿贾克斯·阿姆斯特丹足球俱乐部外文队名:Amsterdamsche Football Club Ajax N.V.运动项目:足球角逐赛事:荷兰足球甲级联赛所属地区:阿姆斯特丹成立时间:1900年3月18日主场馆:阿姆斯特丹球场Amsterdam Arena 容纳人数:51,859 人主要荣誉:荷甲2009-10:第 2 名昵称:Superjoden、Godenzonen主席:约翰·贾克(John C. Jaakke)主教练:马田·祖尔(Martin Jol)球衣供应:阿迪达斯球衣广告:全球人寿(AEGON) ◎ 基本介绍阿贾克斯从历史中可见他们在欧洲赛事表现非常优秀,是欧洲大陆数一数二的顶级俱乐部,1962年在首届欧洲足联图图杯中击败同国俱乐部费耶诺德获得首次国际赛事冠军,随后囊括多个欧洲赛事冠军,包括四届欧洲足球联合会冠军联赛、一届欧洲联盟杯、一届欧洲杯赛冠军杯、三届欧洲超级杯以及两届洲际杯冠军,是目前曾经夺得过欧洲三大杯赛(欧洲足球联合会冠军联赛、欧洲联盟杯、欧洲杯赛冠军杯)的四间足球俱乐部之一(其他包括巴塞罗那、拜仁慕尼黑及尤文图斯)。 阿贾克斯在2008年7月1日结束与荷兰银行长达19年的赞助关系,新的赞助商为全球人寿(AEGON),合约为期7年,总值高达8,550万欧元。 2011年5月15日。阿贾克斯主场与特温特展开决战,西姆·德容上半时首开记录,下半时特温特中场兰扎特自摆乌龙,扬森立即追回一球,西姆·德容再下一城,最终阿贾克斯3比1力克特温特,以2分优势赢得2004年以来的首个荷甲冠军!这也是阿贾克斯的第30个联赛冠军。2011年5月2日晚,西姆德容梅开二度,最终阿贾克斯队以2:0轻松击败芬洛队,凭借领先积分排名第二的费耶诺德队6分的优势,在荷甲只剩下最后一轮的情况下提前卫冕。这也是阿贾克斯在荷甲历史上所夺得的第31座联赛金杯。 ◎ 辉煌荣耀的110周年巡礼◎ 1970-1979第八个十年1970年代无疑是阿贾克斯队史上最为辉煌的十年。除了5次联赛冠军之外,球队还揽下了3次欧冠冠军和一次洲际杯冠军。 1970年:8比0战胜了SVV之后,球队赢得联赛冠军,并开启了梦幻般的七十年代。当年,虽然在杯赛第三轮输给了AZ阿尔克马尔,不过最终奖杯意外地进入了阿贾克斯的奖杯陈列柜。那是因为荷兰足协出人意料地复活了一些球队,从而使得阿贾克斯得以进入四分之一决赛。而最终的夺冠也让人无不惊讶。 1971年7月2日:在2比0战胜了希腊巨人帕纳辛纳科斯之后,球队首度捧起了欧冠冠军奖杯。而更让人振奋的是奖杯正是从死敌费耶诺德手中得到(费耶诺德在一年前夺得欧冠冠军)。 1971年7月6日:门将亨茨·斯图伊涉嫌在与前进之鹰的比赛中赌球。米歇尔斯坚称与帕纳辛纳科斯的比赛可以证明自己的清白,而自己也愿意出庭作证。然而结果并未改变:前进之鹰4比1取胜,威姆·苏比尔为阿贾克斯打进唯一进球。 里努斯·米歇尔 1971年7月8日:里努斯·米歇尔斯宣布离开球队前往巴塞罗那,第一个米歇尔斯时代就此结束。斯蒂凡·科瓦奇成为了他的继任者。 1972年4月30日:2比1战胜了Telstar后,阿贾克斯夺得了那一年球队的第一座冠军奖杯(联赛冠军),就此开启了梦幻般的一年。为球队打进制胜球的是巴里·胡尔索夫。 1972年5月11日:在费耶诺德主场德库普举行的荷兰杯决赛中,阿贾克斯以3比2斩落FC海牙,捧起冠军奖杯。 1972年5月19日:球队12比1狂胜维特斯,为那一个统治性的赛季锦上添花,在全年的联赛中,阿贾克斯仅仅输了与前进之鹰的客场比赛。 1972年5月13日:又是在德库普,阿贾克斯2比0完胜国际米兰,再度夺得欧冠冠军。 1972年9月28日:约翰·雷普的两个进球帮助球队击败了巴西国际队,首次捧得洲际杯。 1973年5月30日:霍斯特·布兰肯伯格助攻雷普进球(下图),阿贾克斯战胜尤文图斯,创下欧冠三连冠的霸业。 1973年8月8日:一切开始慢慢瓦解。先是阿贾克斯先生斯瓦特的最后一场比赛,比赛双方是阿贾克斯与热刺。 1973年8月21日:斯瓦特告别赛两周之后,阿贾克斯失去了另一位偶像,克鲁伊夫远走巴塞罗那。 1974年1月16日:在奥林匹克球场6比0狂胜AC米兰后,球队获得自己的第二座欧洲超级杯。 1974年9月1日:一个新时代来临。路德·吉尔斯在与精英队的比赛中首次代表一队出场,那个赛季中他一人打进30球,无人能出其右。 1974年10月13日:左边锋皮埃特·凯泽在米耶斯·伯曼的一档节目中宣布退役,阿贾克斯再失一员大将。 1975年2月23日:之前一段时期无比辉煌之后,阿贾克斯跌入谷底,球队在主场德米尔2比4输给了FC阿姆斯特丹(由之前的Blauw Wit与DWS合并而成)。而埃因霍温也将那一赛季的联赛冠军揽入怀中。 1975年8月12日:米歇尔斯以教练身份重返他所熟悉的德米尔,他接过的是汉斯·克拉伊的教鞭。 1977年5月1日:3比2战胜了FC阿姆斯特丹,继73年之后再夺联赛冠军,当时球队的教练是伊维奇。而吉尔斯瓜分了球队大部分的进球,并三夺联赛金靴。 1978年3月15日:输给尤文图斯,止步欧冠四分之一决赛。 1978年11月7日:阿贾克斯为克鲁伊夫举办告别赛,对手是拜仁慕尼黑队,最终球队以0比8惨败对手。 1979年5月29日:在德库普阿贾克斯3比0完胜特温特,捧得荷兰杯。 1979年7月4日:在与AZ阿尔克马尔1比1战平后,球队第十八次捧起了联赛冠军奖杯。 ◎ 1980-1989第九个十年1980年5月17日:在荷兰杯决赛中阿贾克斯以1比3负于费耶诺德。 1980年8月23日:弗兰克·里杰卡尔德首次代表一队出场。 1980年11月30日:克鲁伊夫造访德米尔观看阿贾克斯与特温特的比赛,在本哈克的带领下,球队以5比3取胜。当本哈克发现克鲁伊夫就站在自己旁边时也不禁大吃一惊。 1981年3月10日:本哈克向董事会辞职。青年队教练阿德·德莫斯和博比·哈姆斯接替了他的位置。 1981年12月6日:克鲁伊夫在与哈勒姆队的比赛中以一脚精彩的吊射越过对方门将爱德华·梅特古德得分,宣告了自己的回归。 1982年7月1日:阿贾克斯成为荷兰首支得到球衣广告赞助的球队。TDK是最早在阿贾克斯球衣上打广告的公司,不过3年后双方的合作告终。荷兰银行则从1991年到2008年一直占据着阿贾克斯的球衣正面,随后海康保险取而代之直到现在。 1982年4月3日:在5比0大胜奈梅亨的比赛中,17岁的范巴斯滕首次代表一队出场并打进了球队的第三球。他也被认为是克鲁伊夫的接班人。 1982年7月19日:球队23比2狂胜Valthermond队(业余队),威姆·基夫特独中七元,并借此保持着阿贾克斯单场进球最多球员的称号。 1982年12月5日:在5比0战胜海尔蒙德竞技的比赛中,出现了一次精妙的点球配合,罚点球的克鲁伊夫将球拨向左边,奥尔森接球上前,再横传给克鲁伊夫将球打进,对方门将奥托·菲斯菲尔德鞭长莫及。 1983年9月18日:阿贾克斯在奥林匹克球场8比2狂屠克鲁伊夫所在的费耶诺德。 1985年5月25日:阿贾克斯获得球队历史上的第22座联赛奖杯。当时的教练托尼·布鲁因斯只是个替补教练,因为三周前德莫斯犯病,未能指导球队。 1985年7月6日:克鲁伊夫开始担任球队的技术指导,合同为期一年。第二年的1月28日,荷兰足协给了没证的他特赦,因此克鲁伊夫得以开始担任球队教练。 1986年5月25日:在1比3负于鹿特丹斯巴达后,阿贾克斯火速签下对方球员丹尼·布林德。 1986年5月28日:3比0战胜RBC后,阿贾克斯第十次获得荷兰杯。而那也是克鲁伊夫第一年的教练生涯。 1986年8月24日:在3比0战胜哈勒姆的比赛中,布林德与扬·沃特斯双双首秀。 1986年11月9日:范巴斯滕在与邓博施的比赛中打进一记惊世绝伦的倒钩(头图),助攻的是沃特斯。 1987年4月8日:在欧洲优胜者杯的客场比赛中,阿贾克斯雨中击败萨拉戈萨,而在接下来的主场比赛中又以3比0取胜对方。 1987年5月13日:在欧洲优胜者杯决赛中,阿贾克斯1比0战胜莱比锡火车头队,捧得自己的唯一一座优胜者杯。范巴斯滕打进了金子般的一粒进球。一天后,阿贾克斯的球员受到了对方狂热球迷的威胁。 1987年5月31日:阿贾克斯与兹沃勒的比赛成为了范巴斯滕的告别赛。 1988年1月3日:克鲁伊夫告知董事会自己不日离开球队,巴里·胡尔索夫与博比·哈姆斯成为临时代理教练。 1988年5月11日:在优胜者杯第二轮比赛中,阿贾克斯负于斯特拉斯堡队。皮埃特·登博尔错失了球队全场的唯一一脚射门。而这也成了约翰·博斯曼和亨内·梅耶尔的最后一次正式比赛。 1988年5月28日:球队与荷兰队为罗比·德维特踢了一场义赛,这名中场球员在1986年中风,不得不结束自己的职业生涯,尽管不断努力,但仍无法开口说话。在这场比赛中,阿贾克斯与荷兰球衣肩上的一块白色(德维特的姓在荷兰语中是白的意思)感人至深,仿佛大家都与这位曾经的队友并肩作战。 1988年7月25日:在欧洲杯决赛中,荷兰队战胜前苏联捧杯。在这场比赛中,阿贾克斯球员(包括前阿贾克斯球员)沃特斯、里杰卡尔德、范巴斯滕、穆伦以及教练米歇尔斯都功不可没。 1988年8月21日:在与福图纳的比赛中,斯蒂凡·皮特森和威姆·琼克首次为一队出场。 1988年9月20日:教练库特·林德宣布辞职,取而代之的是斯皮茨·科恩和路易斯·范加尔,后者更是首次担任(助理)教练的职务。 1988年9月21日:阿贾克斯青训营的出色人才弗兰克·德波尔首次为一队出场。 1989年1月16日:新的董事会产生,主席是迈克尔·范普拉格,他正是步了父亲雅普·范普拉格的后尘。 1989年9月28日:在阿贾克斯与维也纳的比赛中,对方门将被F-side所在看台投掷的杂物集中,阿贾克斯也因此受到了十分严重的处罚。 1989年7月7日:在荷属苏里南的首府帕拉马里博的机场,阿贾克斯的球员们受到了苏里南球迷的热烈欢迎,包括只代表一队出场5次的苏里南裔门将洛依德·杜伊斯伯格。告示板上写着:最具“色彩”的球队。 1989年7月17日:俱乐部组织了第一次的开放日活动,在开放日的表演赛中电信报队4比0取胜对手。 ◎ 1990-1999第10个十年1990-1991:阿贾克斯在1990年获得了联赛冠军却没能进入欧洲赛场,这在荷甲34年的历史上还是首次。由于1989年在维也纳的比赛中发生的“铁棒事件”,1990-1991赛季阿贾克斯无缘欧洲赛场。 1991年9月28日:路易·范加尔接替本哈克出任球队主教练,这位和本哈克生日相同(皆为8月2日)的40岁的教练从本哈克的助手成为了球队技战术方面的负责人。这天也是范加尔治下的90年代阿贾克斯黄金一代的开端。 1992年5月13日:阿贾克斯在这一天重回欧洲之巅,范加尔的球队赢得了欧洲联盟杯,阿贾克斯在决赛中两回合击败了对手都灵队(2-2,0-0)。在客场比赛中,琼克和彼得森的两粒价值连城的客场进球奠定了最后的胜利。阿贾克斯也成为了第二支囊括欧洲三大杯的球会,此前只有尤文图斯完成了这一壮举。在Leidsplein进行的庆祝仪式稍稍的推迟了一点时间,因为彼得森正从VU医院赶来。瑞典人在第二回合比赛中手臂受伤被抬出场。此外球队大巴还经过了博格坎普的家,博格坎普此时正因为流感躺在床上。此时的大巴正要前往阿姆斯特丹市中心进行庆祝。 1993年3月3日:在联盟杯与欧塞尔队的比赛中,阿贾克斯完成了惊天逆转。在法国进行的第一回合比赛中,阿贾克斯2-4输球。对于第三个失球,门将斯坦利·门佐要付主要责任。在一次防守角球的过程中,他将球碰进了自家大门。在不久之前荷兰队与波兰队的比赛中,门佐同样犯下了低级失误。范加尔因此决定果断拿掉门佐。在与欧塞尔的第二回合比赛中,埃德温·范德萨出现在了球门前。“萨”意味着零失球,但1-0的胜利并不能使阿贾克斯摆脱被淘汰的厄运。门佐的时代已经结束,范德萨的时代到来了。 1993年5月20日:阿贾克斯赢得荷兰杯冠军,在德奎普球场进行的决赛中,阿贾克斯6-2大胜海伦芬。在之前在同一块场地上进行的半决赛中,阿贾克斯同样赢得了胜利:费耶诺德在自己的主场0-5败北。 1993年6月27日:弗兰克·里杰卡尔德回到了阿贾克斯。在AC米兰度过了5个辉煌的赛季里,他获得了两座欧洲冠军杯冠军和两座丰田杯冠军,他回到了效力7年的俱乐部(1980-1987)。这位经验丰富的老将很快展现了自己的价值,在阿贾克斯他又度过了辉煌的两年,并再次夺得欧洲冠军杯冠军。1994年5月1日:在奥林匹克球场41000名观众面前,阿贾克斯2-1击败对手海伦芬,赢得了该赛季的联赛冠军。里杰卡尔德和彼得森(此球为其为阿贾克斯打入的第100粒进球)分别为阿贾克斯建功,弗尔贝克(Gertjan Verbeek)为客队打入一球。 1994年9月14日:9年之后,阿贾克斯终于以联赛冠军的身份重返欧洲冠军杯赛场。此时这项赛事已经更名为欧洲冠军联赛,同时小组赛阶段的赛制对阿贾克斯也是新鲜的。范加尔的球队取得了一个梦幻般的开局。第一场小组赛以2-0战胜鼎鼎大名的AC米兰队告终。罗纳德·德波尔和利特曼宁为阿贾克斯打入了两粒进球。几个月之后在两队的第二次交手中,利特曼宁再次取得了入球。这场倒数第二轮的比赛同样以阿贾克斯2-0胜利结束。开场仅仅两分钟利特曼宁便取得了入球,易边再战之后,经验丰富的巴雷西将球打入自己大门。 1995年4月19日:阿贾克斯在冠军杯1/4决赛中淘汰了海杜克队之后,范加尔的球队在半决赛中迎来的对手是德甲豪门拜仁慕尼黑。首回合比赛两队战成0-0平,次回合在阿姆斯特丹进行的比赛是一场“梦幻般的比赛”。这场在奥林匹克球场进行的比赛中,缺少了弗兰克·德波尔的阿贾克斯队以5-2痛击拜仁。利特曼宁(2球)、菲尼迪·乔治、罗纳德·德波尔和奥维马斯将阿贾克斯射进了维也纳的决赛! 1995年5月24日:阿贾克斯赢得了欧洲冠军杯!这也是继1971、1972和1973年之后,阿贾克斯俱乐部历史上第四次获得这一欧洲足坛的最高荣誉,“1995”也作为一个符号载入了俱乐部史册。在维也纳恩斯特·哈佩尔球场进行的决赛中,帕特里克·克鲁伊维特在终场前6分钟打破了AC米兰队门将罗西的十指关。这是该赛季阿贾克斯第三次在欧洲冠军杯比赛中战胜AC米兰,前无古人,后无来者! 1995年12月28日:阿贾克斯俱乐部历史上第二次获得了丰田杯冠军。在日本东京,阿贾克斯击败了对手巴西俱乐部格雷米奥队。在120分钟的时间内,双方互交白卷。点球大战中,布林德最后一个出场,为阿贾克斯队一球定乾坤。这位阿贾克斯的中后卫扑向范德萨欢庆胜利,后者在点球大战中扑出了对手的第一粒点球,对手的第二个点球高出横梁。 1996年2月28日:阿贾克斯在欧洲超级杯中击败对手皇家萨拉戈萨,这也是1995-1996赛季阿贾克斯获得的最后一项欧洲赛场荣誉。两队在西班牙的首回合比赛中1-1战平,阿贾克斯在主场奥林匹克球场向大满贯发起冲击——联赛冠军、欧洲冠军杯冠军、世界冠军,现在只剩下了欧洲超级杯冠军。在干净利落的以4-0击败对手之后,阿贾克斯完成了这一目标,三名年轻球员Andrei Demchenko, Dave van den Bergh和Robert Gehring也被国外俱乐部掠夺了出去。 1996年5月22日:阿贾克斯又一次进入了冠军杯决赛。在维也纳的决赛结束363天之后,阿贾克斯这次要在罗马为荣誉而战。120分钟的比赛以1-1结束(利特曼宁和维亚利分别打入一球),比赛进入残酷的点球大战。戴维斯和西罗伊射失点球,而尤文图斯则全部打进。阿贾克斯卫冕欧洲冠军失败,但连续两个赛季打入冠军联赛决赛已属不易。 1996年8月14日:女王Beatrix开启阿姆斯特丹竞技场。阿贾克斯队和AC米兰在这里进行了一场揭幕战,不幸的是阿贾克斯以0-3失利。德扬·萨维切维奇打入了球场启用以来的第一粒进球。 1997年3月19日:在与马德里竞技队进行了两场惊心动魄的大战之后,阿贾克斯连续第三年杀入欧洲冠军杯4强。两队在阿姆斯特丹1-1战平,客场在马德里90分钟的比赛同样以1-1结束,经过艰苦的加时赛,阿贾克斯最终以3-2战胜对手。巴班吉达接伍特尔传球在加时赛读秒时刻打入关键入球(此前两队战成2-2),为阿贾克斯锁定胜局。进球之后的他冲向场边,与范加尔一起庆祝晋级。半决赛中,阿贾克斯再次遇到了“老妇人”尤文图斯队,在阿姆斯特丹(1-2)和都灵(1-4)阿贾克斯都输掉了比赛。 1997年6月1日:在阿贾克斯待了6个辉煌的赛季,赢得了一切可以赢得的冠军之后,范加尔离开了球队。他去了西班牙的巴塞罗那俱乐部,奥尔森接替了他的位置,成为了阿贾克斯的新任主帅。 1998年2月16日:阿贾克斯成为全荷兰第一家上市俱乐部。阿贾克斯的部分股权将在阿姆斯特丹股票交易所出售,但是阿贾克斯不会出售大部分的股份,大部分股份仍然会受私人控制。 1998年4月12日:奥尔森在阿贾克斯有一个完美的开局。在他带领阿贾克斯的第一个赛季,他便以一个完美的得失球比例(112-22)和一个恐怖的积分(89)赢得了联赛桂冠。在1998年的复活节,阿贾克斯赢得了联赛冠军。前一天,阿贾克斯在比赛中以7-2击败海伦芬。之后,由于埃因霍温在与鹿特丹斯巴达的比赛中失利,阿贾克斯得以提前五轮夺冠。一周之后,阿贾克斯在与格罗宁根的比赛中捧起联赛奖盘,同时送给了格罗宁根一份大礼(0-3)。 1998年5月17日:阿贾克斯在获得联赛冠军1个多月后,阿贾克斯又获得了杯赛冠军。他们在杯赛决赛中5-0击败埃因霍温夺冠。利特曼宁在德奎普球场上演帽子戏法,此外巴班吉达和阿维拉泽也分别为阿贾克斯建功。在该赛季的联盟杯1/4决赛中,阿贾克斯被莫斯科斯巴达队淘汰出局。 1999年5月16日:在阿贾克斯对阵瓦尔韦耶克比赛后,利特曼宁和布林德向球队告别。阿贾克斯黄金一代在这一年全部离开了阿贾克斯。10岁起就在球队效力的梅尔奇奥特也在这年离开,一周之后客场与布雷达的比赛也成为了范德萨在阿贾克斯的最后一场比赛。这位优秀的门将离开了伴随着自己赢得无数冠军的阿贾克斯,前往了意大利的尤文图斯队。 1999年夏天,沃特斯接替奥尔森成为了阿贾克斯队的主教练。拥有马赫拉斯、阿维拉泽(更多时候充当替补的角色)、范哈尔斯特、温特、布莱恩·劳德鲁普的球队正在迎接新赛季的到来。 ◎ 2000-2009第十一个十年2000年7月1日:阿德里安塞接替维斯特霍夫成为2000-2001赛季阿贾克斯的新主帅。有趣的是,维斯特霍夫离开阿贾克斯后在阿德里安塞之前执教的威廉二世上任。新教练没有遇到大规模的人员流失,只有布莱恩·劳德鲁普选择了退役。 2001年8月22日:2001-2002赛季的开端让阿德里安塞格外失望,阿贾克斯在欧冠资格赛第三轮被苏格兰的凯尔特人淘汰出局,再次无缘欧冠正赛。 2001年11月29日:尽管在前一天阿贾克斯3比2击败了特温特,但阿德里安塞仍然难逃下课的命运。俱乐部在24小时内宣布了新的继任者,罗纳德·科曼,还有他的助手鲁迪·克洛尔。罗纳德·科曼,最后一个将阿贾克斯带进欧冠的教练 2002年5月5日:还有比在5月5日夺冠更好的日子吗?阿贾克在奈梅亨取得了2-0的胜利,赢得了俱乐部历史上第28座荷兰联赛的冠军奖杯。 2003年4月23日:阿贾克斯终于在欧冠上有所突破,科曼的球队杀入了欧冠1/4决赛,迎战AC米兰。首回合两队在阿姆斯特丹竞技场战成0比0平,第二回合直到第90分钟时双方仍是2比2平,此时阿贾克斯客场进球占优,但补时第一分钟托马森的进球击碎了年轻人的梦想,阿贾克斯无奈止步八强。 2003年12月9日:2003-2004赛季,阿贾克斯又一次在欧战中以失望收尾。球队击败格拉茨AK后进入欧冠正赛,但却无法突破AC米兰、塞尔塔和布鲁日所在的小组,两胜四负小组垫底出局。 2004年4月25日:在主场0比0战平奈梅亨后,阿姆斯特丹人欢庆他们的第29个联赛冠军。 2005年2月25日:在联盟杯被法国欧塞尔淘汰后的一天,科曼被解雇。克罗尔和斯洛特作为临时教练接任。 2005年3月3日:米歇尔斯当天不幸逝世,享年77岁。这名伟大教练去世的消息震惊了全世界。 2005年3月14日:丹尼·布林德正式上任,成为阿贾克斯的新主教练。 2005年5月22日: 范德法特完成了他在阿贾克斯的最后一次表演,虽然没有正式的告别,但因为已经和汉堡有了协议,每个人都清楚他即将离开。 2006年1月8日:亨特拉尔正式加盟,他在冬季转会期从海伦芬转来,这位中锋也很快在球队中扮演起重要的角色。在同年5月7日阿贾克斯与埃因霍温的荷兰杯决赛上,亨特拉尔梅开二度帮助球队夺得冠军。 2006年7月3日:滕卡特接受阿贾克斯的邀请,接替布林德入主阿贾克斯。 2006年8月13日:阿贾克斯赢得了这个赛季的第一个荣誉,在新援斯塔姆和佩雷斯的帮助下,球队3比1击败埃因霍温,拿下了当年的克鲁伊夫杯。 2007年5月6日:戴维斯踢进关键球,通过点球大战阿贾克斯战胜阿尔克马尔,成功卫冕荷兰杯。 2007年8月11日:克鲁伊夫杯再次归入阿贾克斯帐下,凭借加布里的一脚远射,阿贾克斯1比0击败埃因霍温。 2007年8月26日:韦斯利·斯内德告别阿贾克斯,他在这里度过了16载春秋,那个夏天他高价转会西班牙皇家马德里。 2007年8月29日:阿贾克斯失足欧冠资格赛,捷克的布拉格斯拉维亚两回合激战后把阿贾克斯淘汰出局。 2008年4月20日:继范德法特和斯内德之后,海廷加也离开了阿贾克斯,他前往西班牙的马德里竞技寻求新的挑战。 2008年7月1日:范巴斯滕回到阿贾克斯担任主教练。但仅过了一个赛季,这位伟大的前锋就宣布辞职,范斯奇普临时替代他完成了最后一场比赛。 2009年6月1日:马丁·约尔成为了新的主帅. 2011年5月15日:阿贾克斯主场与特温特展开决战,西姆·德容上半时首开记录,下半时特温特中场兰扎特自摆乌龙,扬森立即追回一球,西姆·德容再下一城,最终阿贾克斯3比1力克特温特,以2分优势赢得2004年以来的首个荷甲冠军!这也是阿贾克斯的第30个联赛冠军。 ◎ 大事纪年年 份 事 项 1893年 一班对足球有兴趣的青年组织一支足球队,后来成为现时的阿贾克斯 1894年 球队命名为阿贾克斯,英文名为“Foothball Club Ajax” 1900年 3月18日,Floris Stempel、Carel Reeser及Johan Dade在荷兰阿姆斯特丹市中心的一间酒店内,正式成立“阿贾克斯足球俱乐部” 1911年 5月12日,成为乙组联赛冠军,首次升级甲组联赛 1913-14年 降落乙组联赛 1915年 Jack Reynolds 成为俱乐部新主教练,并执教俱乐部达33年,成为目前任期最长的主教练 1917年 荷兰足总让阿贾克斯包括在内的8队乙组队伍提升甲组,自此球队从未降级;同年夺得荷兰杯 1917-18年 以不败纪录夺得创会后首个联赛冠军 1930-31年 Jack Reynolds 重返阿贾克斯,并协助重夺失落12年联赛冠军 20世纪30年代 踏入俱乐部首个黄金时期,十年内共五次夺得联赛冠军,成为当时荷兰足坛得令的球队 1934年 12月9日,主场搬至迪美亚球场(De Meer Stadion)直到1996年 1946-47年 经过第二次世界大战后夺得首个联赛冠军 1956-57年 夺得第9个联赛冠军,并首次参加来季的欧洲赛事 1956-57年 在欧洲冠军俱乐部杯中,于四分之一决赛被匈牙利球队淘汰出局 1964-65年 球队以第13名完成联赛,是自第二次世界大战后最差成绩 1965年 米高斯开始执教俱乐部,将他的足球概念“全能足球”放入球队 1966-67年 首次夺得国内联赛和杯赛成为“双料冠军” 20世纪70年代 由克鲁伊夫带领下踏入俱乐部最高锋的时期,夺得多个联赛及杯赛冠军 1971年 以2:0击败希腊帕纳辛奈科斯,首次夺得欧冠联赛冠军,同年米高斯其后转投西班牙巴塞罗那,而克鲁伊夫成为欧洲足球先生 1972年 2:0击败意大利国际米兰,成功卫冕欧冠联赛冠军,同年夺得洲际杯冠军 1973年 1:0击败意大利尤文图斯,成为史无前例三次成为欧洲冠军,克鲁伊夫跟随米高斯加盟西班牙巴塞罗那 1987年 夺得欧洲杯赛冠军杯冠军。 1992年 在欧洲联盟杯决赛中,作客情况下与意大利都灵打成2:2,阿贾克斯以作客入球优惠夺得冠军。 1995年 1:0击败意大利AC米兰,第四次夺得欧洲冠军杯冠军。 1996年 再次杀入欧洲冠军杯决赛,和尤文图斯战成1:1,点球2比4负于尤文图斯,未能卫冕冠军,同年将主场迁至阿姆斯特丹球场(Amsterdam Arena)。 2009年 范·巴斯滕请辞,俱乐部宣布助教舒祖比会接任至季尾,6月阿贾克斯宣布邀请德甲汉堡教练马丁约尔接手。 ◎ 俱乐部荣誉荣誉 次数 年度 本 土 联 赛 荷兰足球甲级联赛冠军 30 1917-18年,1918-19年,1930-31年,1931-32年,1933-34年, 本 土 杯 赛 荷兰杯冠军 18 1917年,1943年,1961年,1967年,1970年, 荷兰超级杯/克鲁伊夫盾冠军 7 1993年,1994年,1995年,2002年,2005年, 阿姆斯特丹锦标赛冠军 4 2001年,2002年,2003年,2004年 欧 洲 赛 事 欧洲冠军俱乐部杯/ 欧洲杯赛冠军杯冠军 1 1987年1:0 对 莱比钖火车头 欧洲联盟杯冠军 1 1992年2:2 对 都灵(以作客入球优惠胜出) 欧洲超级杯冠军 3 1972年6:3 对 格拉斯哥流浪者(两回合) 图图杯冠军 1 1962年4:2 对 费耶诺德 国 际 赛 事 丰田杯冠军 2 1972年4:1 对 独立队(两回合) ◎ 球员名单◎ 目前效力(2011/12)球衣号 球员 英文名 位置 生日 国籍 身高(cm) 体重(kg) 出场次数 进球数 1 凯尼斯·弗米尔 Kenneth Vermeer 门将 1986-01-10 荷兰 183 80 2 格雷戈里·范德维尔 Gregory van der Wiel 后卫 1988-02-03 荷兰 172 69 3 托比·阿尔德韦雷尔德 Toby Alderweireld 后卫 1989-03-02 比利时 186 4 费尔通亨 Jan Vertonghen 后卫 1987-04-24 比利时 189 79 5 阿尼塔 Vurnon Anita 前卫 1989-04-04 荷兰 167 63 6 埃诺 Eyong Enoh 前卫 1986-03-26 喀麦隆 178 7 米拉莱姆·苏莱曼尼 Miralem Sulejmani 前锋 1988-12-05 塞尔维亚 178 68 8 克里斯蒂安·埃里克森 Christian Eriksen 前卫 1992-02-14 丹麦 175 65 9 科尔贝恩·西格索尔松 Kolbeinn Sigthorsson 前锋 1990-03-14 冰岛 10 西姆·德容 Siem De Jong 前卫 1989-01-28 荷兰 185 76 11 洛伦佐。埃贝西利奥 Ebicilio 前锋 1992-09-24 荷兰 179 76 13 奥耶 Andre Ooijer 右后卫 1974-07-11 荷兰 185 76 15 尼科莱·博伊莱森 Nicolai Boilesen 中场 1992-02-16 乌拉圭 180 69 16 泰奥。杨森 Theo Janssen 中场 1981-7-27 荷兰 17 布林德 Daley Blind 后卫 1990-03-09 荷兰 180 18 罗德伊罗 Nicolas Lodeiro 前腰 1989-02-21 乌拉圭 170 69 19 德米特里·布雷金 Bulikin 前锋 1979-11-20 俄罗斯 192 82 21 德克·博里赫特 Derk Boerrigter 前锋 1986-10-16 荷兰 186 22 贾斯帕·西莱森 Jasper Cillessen 门将 1989-04-22 荷兰 187 82 23 阿拉什·厄兹比利兹 Aras Ozbiliz 前卫 1990-03-09 荷兰 171 65 25 图拉尼·塞雷罗 Serero 前卫 1990-04-11 南非 172 28 马茨·里茨 Mats Rits 中场 1993-07-18 比利时 180 70 30 费尔霍芬 Jeroen Verhoeven 门将 1980-04-30 荷兰 191 104 ◎ 转会(2011/2012)转入 号码 位置 球员 19 前锋 德米特里·布雷金 21 前锋 德克·博里赫特 9 前锋 克尔贝恩·西格索尔松 25 中场 图拉尼·赛雷罗 28 中场 马茨·里茨 22 门将 贾斯帕·西莱森 16 中场 泰奥·杨森 转出 号码 位置 球员
◎ 外借球员(2011/2012)编号 球员名字 位置 出生日期 加盟年份 外借俱乐部 外借年期
◎ 曾效力著名球员尔科·范巴斯滕 4 亚甲斯炸药Ajax:亚甲斯炸药 5 艾杰克斯铜锡铅轴承合金Ajax:艾杰克斯铜锡铅轴承合金 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。