您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 相当不错的Ajax教程
掌握Ajax第1部分:Ajax简介理解Ajax及其工作原理,构建网站的一种有效方法级别:初级BrettMcLaughlin,作家,编辑,O'ReillyandAssociates2006年1月04日Ajax由HTML、javascript™技术、DHTML和DOM组成,这一杰出的方法可以将笨拙的Web界面转化成交互性的Ajax应用程序。本文的作者是一位Ajax专家,他演示了这些技术如何协同工作——从总体概述到细节的讨论——使高效的Web开发成为现实。他还揭开了Ajax核心概念的神秘面纱,包括XMLHttpRequest对象。五年前,如果不知道XML,您就是一只无人重视的丑小鸭。十八个月前,Ruby成了关注的中心,不知道Ruby的程序员只能坐冷板凳了。今天,如果想跟上最新的技术时尚,那您的目标就是Ajax。但是,Ajax不仅仅是一种时尚,它是一种构建网站的强大方法,而且不像学习一种全新的语言那样困难。但在详细探讨Ajax是什么之前,先让我们花几分钟了解Ajax做什么。目前,编写应用程序时有两种基本的选择:桌面应用程序Web应用程序两者是类似的,桌面应用程序通常以CD为介质(有时候可从网站下载)并完全安装到您的计算机上。桌面应用程序可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。Web应用程序运行在某处的Web服务器上——毫不奇怪,要通过Web浏览器访问这种应用程序。不过,比这些应用程序的运行代码放在何处更重要的是,应用程序如何运转以及如何与其进行交互。桌面应用程序一般很快(就在您的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作系统有关)和非凡的动态性。可以单击、选择、输入、打开菜单和子菜单、到处巡游,基本上不需要等待。另一方面,Web应用程序是最新的潮流,它们提供了在桌面上不能实现的服务(比如Amazon.com和eBay)。但是,伴随着Web的强大而出现的是等待,等待服务器响应,等待屏幕刷新,等待请求返回和生成新的页面。显然这样说过于简略了,但基本的概念就是如此。您可能已经猜到,Ajax尝试建立桌面应用程序的功能和交互性,与不断更新的Web应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和漂亮的控件,不过是在Web应用程序中。还等什么呢?我们来看看Ajax如何将笨拙的Web界面转化成能迅速响应的Ajax应用程序吧。老技术,新技巧在谈到Ajax时,实际上涉及到多种技术,要灵活地运用它必须深入了解这些不同的技术(本系列的头几篇文章将分别讨论这些技术)。好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很容易学习,并不像完整的编程语言(如Java或Ruby)那样困难。Ajax的定义顺便说一下,Ajax是AsynchronousjavascriptandXML(以及DHTML等)的缩写。这个短语是AdaptivePath的JesseJamesGarrett发明的(请参阅参考资料),按照Jesse的解释,这不是个首字母缩写词。下面是Ajax应用程序所用到的基本技术:HTML用于建立Web表单并确定应用程序其他部分使用的字段。javascript代码是运行Ajax应用程序的核心代码,帮助改进与服务器应用程序的通信。DHTML或DynamicHTML,用于动态更新表单。我们将使用div、span和其他动态HTML元素来标记HTML。文档对象模型DOM用于(通过javascript代码)处理HTML结构和(某些情况下)服务器返回的XML。我们来进一步分析这些技术的职责。以后的文章中我将深入讨论这些技术,目前只要熟悉这些组件和技术就可以了。对这些代码越熟悉,就越容易从对这些技术的零散了解转变到真正把握这些技术(同时也真正打开了Web应用程序开发的大门)。XMLHttpRequest对象要了解的一个对象可能对您来说也是最陌生的,即XMLHttpRequest。这是一个javascript对象,创建该对象很简单,如清单1所示。清单1.创建新的XMLHttpRequest对象scriptlanguage=javascripttype=text/javascriptvarxmlHttp=newXMLHttpRequest();/script下一期文章中将进一步讨论这个对象,现在要知道这是处理所有服务器通信的对象。继续阅读之前,先停下来想一想:通过XMLHttpRequest对象与服务器进行对话的是javascript技术。这不是一般的应用程序流,这恰恰是Ajax的强大功能的来源。在一般的Web应用程序中,用户填写表单字段并单击Submit按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是PHP或Java,也可能是CGI进程或者类似的东西),脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的HTML,也可能是确认页面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和返回新表单时用户必须等待。屏幕变成一片空白,等到服务器返回数据后再重新绘制。这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。Ajax基本上就是把JavaScript技术和XMLHttpRequest对象放在Web表单和服务器之间。当用户填写表单时,数据发送给一些javascript代码而不是直接发送给服务器。相反,javascript代码捕获表单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,javascript代码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说javascript代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。然后,服务器将数据返回javascript代码(仍然在Web表单中),后者决定如何处理这些数据。它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。javascript代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就是XMLHttpRequest的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。加入一些javascript得到XMLHttpRequest的句柄后,其他的javascript代码就非常简单了。事实上,我们将使用javascript代码完成非常基本的任务:获取表单数据:javascript代码很容易从HTML表单中抽取数据并发送到服务器。修改表单上的数据:更新表单也很简单,从设置字段值到迅速替换图像。解析HTML和XML:使用javascript代码操纵DOM(请参阅下一节),处理HTML表单服务器返回的XML数据的结构。对于前两点,需要非常熟悉getElementById()方法,如清单2所示。清单2.用javascript代码捕获和设置字段值//GetthevalueofthephonefieldandstuffitinavariablecalledphoneVarphone=document.getElementById(phone).value;//Setsomevaluesonaformusinganarraycalledresponsedocument.getElementById(order).value=response[0];document.getElementById(address).value=response[1];这里没有特别需要注意的地方,真是好极了!您应该认识到这里并没有非常复杂的东西。只要掌握了XMLHttpRequest,Ajax应用程序的其他部分就是如清单2所示的简单javascript代码了,混合有少量的HTML。同时,还要用一点儿DOM,我们就来看看吧。以DOM结束最后还有DOM,即文档对象模型。可能对有些读者来说DOM有点儿令人生畏,HTML设计者很少使用它,即使javascript程序员也不大用到它,除非要完成某项高端编程任务。大量使用DOM的是复杂的Java和C/C++程序,这可能就是DOM被认为难以学习的原因。幸运的是,在javascript技术中使用DOM很容易,也非常直观。现在,按照常规也许应该说明如何使用DOM,或者至少要给出一些示例代码,但这样做也可能误导您。即使不理会DOM,仍然能深入地探讨Ajax,这也是我准备采用的方法。以后的文章将再次讨论DOM,现在只要知道可能需要DOM就可以了。当需要在javascript代码和服务器之间传递XML和改变HTML表单的时候,我们再深入研究DOM。没有它也能做一些有趣的工作,因此现在就把DOM放到一边吧。获取Request对象有了上面的基础知识后,我们来看看一些具体的例子。XMLHttpRequest是Ajax应用程序的核心,而且对很多读者来说可能还比较陌生,我们就从这里开始吧。从清单1可以看出,创建和使用这个对象非常简单,不是吗?等一等。还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest成了这场战争的牺牲品之一。因此获得XMLHttpRequest对象可能需要采用不同的方法。下面我将详细地进行解释。使用Microsoft浏览器Microsoft浏览器InternetExplorer使用MSXML解析器处理XML(可以通过参考资料进一步了解MSXML)。因此如果编写的Ajax应用程序要和InternetExplorer打交道,那么必须用一种特殊的方式创建对象。但并不是这么简单。根据InternetExplorer中安装的javascript技术版本不同,MSXML实际上有两种不同的版本,因此必须对这两种情况分别编写代码。请参阅清单3,其中的代码在Microsoft浏览器上创建了一个XMLHttpRequest。清单3.在Microsoft浏览器上创建XMLHttpRequest对象varxmlHttp=false;try{xmlHttp=newActiveXObject(Msxml2.XMLHTTP);}catch(e){try{xmlHttp=newActiveXObject(Microsoft.XMLHTTP);}catch(e2){xmlHttp=false;}}您对这些代码可能还不完全理解,但没有关系。当本系列文章结束的时候,您将对javascript编程、错误处理、条件编译等有更深的了解。现在只要牢牢记住其中的两行代码:xmlHttp=newActiveXObject(Msxml2.XMLHTTP);和xmlHttp=newActiveXObject(Microsoft.XMLHTTP);。这两行代码基本上就是尝试使用一个版本的MSXML创建对象,如果失败则使用另一个版本创建该对象。不错吧?如果都不成功,则将xmlHttp变量设为false,告诉您的代码出现了问题。如果出现这种情况,可能是因为安装了非Microsoft浏览器,需要使用不同的代码。处理Mozilla和非Microsoft浏览器如果选择的浏览器不是InternetExplorer,或者为非Microsoft浏览器编写代码,就需要使用不同的代码。事实上就是清单1所示的一行简单代码:varxmlHttp=newXMLHttpRequestobject;。这行简单得多的代码在Mozilla、Firefox、Safari、Opera以及基本上所有以任何形式或方式支持Ajax的非Microsoft浏览器中,创建了XMLHttpRequest对象。结合起来关键是要支持所有浏览器。谁愿意编写一个只能用于InternetExplorer或者非Microsoft浏览器的应用程序呢?或者更糟,
本文标题:相当不错的Ajax教程
链接地址:https://www.777doc.com/doc-7054654 .html