2022年Ajax完整教程 .pdf

上传人:Che****ry 文档编号:27188959 上传时间:2022-07-23 格式:PDF 页数:42 大小:1.74MB
返回 下载 相关 举报
2022年Ajax完整教程 .pdf_第1页
第1页 / 共42页
2022年Ajax完整教程 .pdf_第2页
第2页 / 共42页
点击查看更多>>
资源描述

《2022年Ajax完整教程 .pdf》由会员分享,可在线阅读,更多相关《2022年Ajax完整教程 .pdf(42页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第 1 页 Ajax 简介Ajax 由 HTML 、JavaScript? 技术、 DHTML 和 DOM 组成,这一杰出的方法可以将笨拙的 Web 界面转化成交互性的Ajax 应用程序。本文的作者是一位Ajax 专家,他演示了这些技术如何协同工作从总体概述到细节的讨论使高效的Web 开发成为现实。他还揭开了Ajax 核心概念的神秘面纱,包括XMLHttpRequest 对象。五年前,如果不知道XML ,您就是一只无人重视的丑小鸭。十八个月前,Ruby 成了关注的中心,不知道Ruby 的程序员只能坐冷板凳了。今天,如果想跟上最新的技术时尚,那您的目标就是Ajax 。但是, Ajax 不仅仅是一

2、种时尚, 它是一种构建网站的强大方法,而且不像学习一种全新的语言那样困难。但在详细探讨Ajax 是什么之前,先让我们花几分钟了解Ajax 做 什么。目前,编写应用程序时有两种基本的选择: 桌面应用程序 Web 应用程序两者是类似的,桌面应用程序通常以CD 为介质(有时候可从网站下载)并完全安装到您的计算机上。 桌面应用程序可能使用互联网下载更新,但运行这些应用程序的代码在桌面计算机上。 Web 应用程序运行在某处的Web 服务器上毫不奇怪, 要通过Web 浏览器访问这种应用程序。不过,比这些应用程序的运行代码放在何处更重要的是,应用程序如何运转以及如何与其进行交互。桌面应用程序一般很快(就在您

3、的计算机上运行,不用等待互联网连接),具有漂亮的用户界面(通常和操作系统有关)和非凡的动态性。可以单击、选择、输入、打开菜单和子菜单、到处巡游,基本上不需要等待。另一方面,Web 应用程序是最新的潮流,它们提供了在桌面上不能实现的服务(比如A 和 eBay) 。但是,伴随着Web 的强大而出现的是等待,等待服务器响应,等待屏幕刷新,等待请求返回和生成新的页面。显然这样说过于简略了,但基本的概念就是如此。您可能已经猜到,Ajax 尝试建立桌面应用程序的功能和交互性,与不断更新的Web 应用程序之间的桥梁。可以使用像桌面应用程序中常见的动态用户界面和漂亮的控件,不过是在Web 应用程序中。还等什么

4、呢?我们来看看Ajax 如何将笨拙的Web 界面转化成能迅速响应的Ajax 应用程序吧。老技术,新技巧在谈到Ajax 时, 实际上涉及到多种技术,要灵活地运用它必须深入了解这些不同的技术(本名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 42 页 - - - - - - - - - 系列的头几篇文章将分别讨论这些技术)。好消息是您可能已经非常熟悉其中的大部分技术,更好的是这些技术都很容易学习,并不像完整的编程语言(如Java 或 Ruby)那样困难。下面是Ajax 应用程

5、序所用到的基本技术: HTML 用于建立Web 表单并确定应用程序其他部分使用的字段。 JavaScript 代码是运行Ajax 应用程序的核心代码,帮助改进与服务器应用程序的通信。 DHTML 或 Dynamic HTML , 用于动态更新表单。 我们将使用div、 span 和其他动态HTML 元素来标记HTML 。 文档对象模型DOM 用于(通过JavaScript 代码)处理HTML 结构和(某些情况下)服务器返回的XML 。Ajax 的定义顺便说一下, Ajax 是 Asynchronous JavaScript and XML (以及DHTML 等)的缩写。这个短语是Adaptiv

6、e Path 的 Jesse James Garrett 发明的(请参阅参考资料),按照Jesse 的解释,这不是个首字母缩写词。我们来进一步分析这些技术的职责。以后的文章中我将深入讨论这些技术,目前只要熟悉这些组件和技术就可以了。对这些代码越熟悉,就越容易从对这些技术的零散了解转变到真正把握这些技术(同时也真正打开了Web 应用程序开发的大门) 。XMLHttpRequest 对象要了解的一个对象可能对您来说也是最陌生的,即XMLHttpRequest 。这是一个JavaScript 对象,创建该对象很简单,如清单1 所示。清单1. 创建新的XMLHttpRequest 对象 var xml

7、Http = new XMLHttpRequest(); 下一期文章中将进一步讨论这个对象,现在要知道这是处理所有服务器通信的对象。继续阅读之前,先停下来想一想: 通过XMLHttpRequest 对象与服务器进行对话的是JavaScript 技术。这不是一般的应用程序流,这恰恰是Ajax 的强大功能的来源。在一般的Web 应用程序中,用户填写表单字段并单击Submit 按钮。然后整个表单发送到服务器,服务器将它转发给处理表单的脚本(通常是PHP 或 Java,也可能是CGI 进程或者类似的东西) ,脚本执行完成后再发送回全新的页面。该页面可能是带有已经填充某些数据的新表单的HTML ,也可能

8、是确认页面,或者是具有根据原来表单中输入数据选择的某些选项的页面。当然,在服务器上的脚本或程序处理和返回新表单时用户必须等待。屏幕变成一片空白, 等到服务器返回数据后再重新绘制。这就是交互性差的原因,用户得不到立即反馈,因此感觉不同于桌面应用程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 42 页 - - - - - - - - - Ajax 基本上就是把JavaScript 技术和XMLHttpRequest 对象放在Web 表单和服务器之间。当用户填写表单时,数

9、据发送给一些JavaScript 代码而不是直接发送给服务器。相反,JavaScript 代码捕获表单数据并向服务器发送请求。同时用户屏幕上的表单也不会闪烁、消失或延迟。换句话说,JavaScript 代码在幕后发送请求,用户甚至不知道请求的发出。更好的是,请求是异步发送的,就是说JavaScript 代码(和用户)不用等待服务器的响应。因此用户可以继续输入数据、滚动屏幕和使用应用程序。然后,服务器将数据返回JavaScript 代码(仍然在Web 表单中),后者决定如何处理这些数据。 它可以迅速更新表单数据,让人感觉应用程序是立即完成的,表单没有提交或刷新而用户得到了新数据。JavaScri

10、pt 代码甚至可以对收到的数据执行某种计算,再发送另一个请求,完全不需要用户干预!这就是XMLHttpRequest 的强大之处。它可以根据需要自行与服务器进行交互,用户甚至可以完全不知道幕后发生的一切。结果就是类似于桌面应用程序的动态、快速响应、高交互性的体验,但是背后又拥有互联网的全部强大力量。加入一些JavaScript 得到XMLHttpRequest 的句柄后,其他的JavaScript 代码就非常简单了。事实上,我们将使用JavaScript 代码完成非常基本的任务: 获取表单数据:JavaScript 代码很容易从HTML 表单中抽取数据并发送到服务器。 修改表单上的数据:更新表

11、单也很简单,从设置字段值到迅速替换图像。 解析 HTML 和 XML : 使用JavaScript 代码操纵DOM(请参阅下一节), 处理HTML 表单服务器返回的XML 数据的结构。对于前两点,需要非常熟悉getElementById() 方法,如清单2 所示。清单2. 用 JavaScript 代码捕获和设置字段值/ Get the value of the phone field and stuff it in a variable called phone var phone = document.getElementById(phone).value; / Set some valu

12、es on a form using an array called response document.getElementById(order).value = response0; document.getElementById(address).value = response1; 这里没有特别需要注意的地方,真是好极了! 您应该认识到这里并没有非常复杂的东西。只要掌握了XMLHttpRequest , Ajax 应用程序的其他部分就是如清单2 所示的简单JavaScript 代码了,混合有少量的HTML 。同时,还要用一点儿DOM ,我们就来看看吧。以 DOM 结束最后还有DOM ,

13、 即文档对象模型。 可能对有些读者来说DOM 有点儿令人生畏, HTML 设计者很少使用它,即使JavaScript 程序员也不大用到它,除非要完成某项高端编程任务。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 42 页 - - - - - - - - - 大量使用DOM 的是复杂的Java 和 C/C+ 程序, 这可能就是DOM 被认为难以学习的原因。幸运的是,在JavaScript 技术中使用DOM 很容易,也非常直观。现在,按照常规也许应该说明如何使用DOM ,或

14、者至少要给出一些示例代码,但这样做也可能误导您。即使不理会 DOM ,仍然能深入地探讨Ajax ,这也是我准备采用的方法。以后的文章将再次讨论DOM ,现在只要知道可能需要DOM 就可以了。 当需要在JavaScript 代码和服务器之间传递 XML 和改变HTML 表单的时候, 我们再深入研究DOM 。没有它也能做一些有趣的工作,因此现在就把DOM 放到一边吧。获取Request 对象有了上面的基础知识后,我们来看看一些具体的例子。XMLHttpRequest 是 Ajax 应用程序的核心, 而且对很多读者来说可能还比较陌生,我们就从这里开始吧。从 清单 1 可以看出,创建和使用这个对象非常

15、简单,不是吗?等一等。还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest 成了这场战争的牺牲品之一。因此获得XMLHttpRequest 对象可能需要采用不同的方法。下面我将详细地进行解释。使用Microsoft 浏览器Microsoft 浏览器Internet Explorer 使用MSXML 解析器处理XML (可以通过参考资料进一步了解MSXML ) 。因此如果编写的Ajax 应用程序要和Internet Explorer 打交道,那么必须用一种特殊的方式创建对象

16、。但并不是这么简单。根据Internet Explorer 中安装的JavaScript 技术版本不同, MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。请参阅清单 3,其中的代码在Microsoft 浏览器上创建了一个XMLHttpRequest 。清单3. 在 Microsoft 浏览器上创建XMLHttpRequest 对象var xmlHttp = false; try xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); catch (e) try xmlHttp = new ActiveXObject(Microsoft.X

17、MLHTTP); catch (e2) xmlHttp = false; 您对这些代码可能还不完全理解,但没有关系。 当本系列文章结束的时候,您将对JavaScript 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 42 页 - - - - - - - - - 编程、错误处理、条件编译等有更深的了解。现在只要牢牢记住其中的两行代码:xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); 和xmlHttp = new ActiveXObj

18、ect(Microsoft.XMLHTTP);。这两行代码基本上就是尝试使用一个版本的MSXML 创建对象,如果失败则使用另一个版本创建该对象。不错吧?如果都不成功,则将xmlHttp 变量设为false,告诉您的代码出现了问题。 如果出现这种情况,可能是因为安装了非Microsoft 浏览器,需要使用不同的代码。处理Mozilla 和非Microsoft 浏览器如果选择的浏览器不是Internet Explorer ,或者为非Microsoft 浏览器编写代码,就需要使用不同的代码。事实上就是清单1 所示的一行简单代码:var xmlHttp = new XMLHttpRequest obj

19、ect;。这行简单得多的代码在Mozilla 、Firefox 、Safari、Opera 以及基本上所有以任何形式或方式支持Ajax 的非Microsoft 浏览器中,创建了XMLHttpRequest 对象。结合起来关键是要支持所有浏览器。谁愿意编写一个只能用于Internet Explorer 或者非Microsoft 浏览器的应用程序呢?或者更糟,要编写一个应用程序两次?当然不!因此代码要同时支持Internet Explorer 和非Microsoft 浏览器。清单4 显示了这样的代码。清单4. 以支持多种浏览器的方式创建XMLHttpRequest 对象/* Create a ne

20、w XMLHttpRequest object to talk to the Web server */ var xmlHttp = false; /*cc_on */ /*if (_jscript_version = 5) try xmlHttp = new ActiveXObject(Msxml2.XMLHTTP); catch (e) try xmlHttp = new ActiveXObject(Microsoft.XMLHTTP); catch (e2) xmlHttp = false; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -

21、 - - - - 名师精心整理 - - - - - - - 第 5 页,共 42 页 - - - - - - - - - end */ if (!xmlHttp & typeof XMLHttpRequest != undefined) xmlHttp = new XMLHttpRequest(); 现在先不管那些注释掉的奇怪符号,如 cc_on,这是特殊的JavaScript 编译器命令, 将在下一期针对XMLHttpRequest 的文章中详细讨论。这段代码的核心分为三步:1、建立一个变量xmlHttp 来引用即将创建的XMLHttpRequest 对象。2、尝试在Microsoft 浏览

22、器中创建该对象: 1)尝试使用Msxml2.XMLHTTP 对象创建它。 2)如果失败,再尝试Microsoft.XMLHTTP 对象。2、如果仍然没有建立xmlHttp ,则以非Microsoft 的方式创建该对象。最后, xmlHttp 应该引用一个有效的XMLHttpRequest 对象,无论运行什么样的浏览器。关于安全性的一点说明安全性如何呢?现在浏览器允许用户提高他们的安全等级,关闭JavaScript 技术,禁用浏览器中的任何选项。在这种情况下,代码无论如何都不会工作。此时必须适当地处理问题,这需要单独的一篇文章来讨论,要放到以后了(这个系列够长了吧?不用担心,读完之前也许您就掌握

23、了) 。现在要编写一段健壮但不够完美的代码,对于掌握Ajax 来说就很好了。以后我们还将讨论更多的细节。Ajax 世界中的请求/响应现在我们介绍了Ajax,对XMLHttpRequest 对象以及如何创建它也有了基本的了解。如果阅读得很仔细,您可能已经知道与服务器上的Web 应用程序打交道的是JavaScript 技术,而不是直接提交给那个应用程序的HTML 表单。还缺少什么呢?到底如何使用XMLHttpRequest 。因为这段代码非常重要,您编写的每个Ajax 应用程序都要以某种形式使用它,先看看Ajax 的基本请求 /响应模型是什么样吧。发出请求您已经有了一个崭新的XMLHttpRequ

24、est 对象,现在让它干点活儿吧。首先需要一个Web 页面能够调用的JavaScript 方法(比如当用户输入文本或者从菜单中选择一项时)。接下来就是在所有Ajax 应用程序中基本都雷同的流程:1、从Web 表单中获取需要的数据。2、建立要连接的URL 。3、打开到服务器的连接。4、设置服务器在完成后要运行的函数。5、发送请求。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 42 页 - - - - - - - - - 清单5 中的示例Ajax 方法就是按照这个顺序组织的

25、:清单5. 发出 Ajax 请求function callServer() / Get the city and state from the web form var city = document.getElementById(city).value; var state = document.getElementById(state).value; / Only go on if there are values for both fields if (city = null) | (city = ) return; if (state = null) | (state = ) retu

26、rn; / Build the URL to connect to var url = /scripts/getZipCode.php?city= + escape(city) + &state= + escape(state); / Open a connection to the server xmlHttp.open(GET, url, true); / Setup a function for the server to run when its done xmlHttp.onreadystatechange = updatePage; / Send the request xmlHt

27、tp.send(null); 其中大部分代码意义都很明确。开始的代码使用基本JavaScript 代码获取几个表单字段的值。然后设置一个PHP 脚本作为链接的目标。要注意脚本URL 的指定方式, city 和 state(来自表单)使用简单的GET 参数附加在URL 之后。然后打开一个连接,这是您第一次看到使用XMLHttpRequest 。其中指定了连接方法(GET)和要连接的URL 。 最后一个参数如果设为true, 那么将请求一个异步连接(这就是Ajax 的由来) 。如果使用false,那么代码发出请求后将等待服务器返回的响应。如果设为true,当服务器在后台处理请求的时候用户仍然可以使

28、用表单(甚至调用其他JavaScript 方法) 。xmlHttp (要记住,这是XMLHttpRequest 对象实例)的onreadystatechange 属性可以告诉服务器在运行完成后(可能要用五分钟或者五个小时)做什么。 因为代码没有等待服务器,必须让服务器知道怎么做以便您能作出响应。在这个示例中, 如果服务器处理完了请求,一个特殊的名为updatePage() 的方法将被触发。最后, 使用值null 调用 send()。 因为已经在请求URL 中添加了要发送给服务器的数据(city 和 state) ,所以请求中不需要发送任何数据。这样就发出了请求,服务器按照您的要求工作。如果没有

29、发现任何新鲜的东西,您应该体会到这是多么简单明了!除了牢牢记住Ajax 的异步特性外,这些内容都相当简单。应该感激Ajax 使您能够专心编写漂亮的应用程序和界面,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 42 页 - - - - - - - - - 而不用担心复杂的HTTP 请求 /响应代码。清单5 中的代码说明了Ajax 的易用性。数据是简单的文本,可以作为请求URL 的一部分。用GET 而不是更复杂的POST 发送请求。没有XML 和要添加的内容头部,请求体中没

30、有要发送的数据;换句话说,这就是Ajax 的乌托邦。不用担心,随着本系列文章的展开,事情会变得越来越复杂。您将看到如何发送POST 请求、如何设置请求头部和内容类型、如何在消息中编码XML 、如何增加请求的安全性,可以做的工作还有很多!暂时先不用管那些难点,掌握好基本的东西就行了,很快我们就会建立一整套的Ajax 工具库。处理响应现在要面对服务器的响应了。现在只要知道两点: 什么也不要做,直到xmlHttp.readyState 属性的值等于4。 服务器将把响应填充到xmlHttp.responseText 属性中。其中的第一点,即就绪状态,将在下一篇文章中详细讨论,您将进一步了解HTTP 请

31、求的阶段,可能比您设想的还多。现在只要检查一个特定的值(4)就可以了(下一期文章中还有更多的值要介绍) 。第二点,使用xmlHttp.responseText 属性获得服务器的响应,这很简单。清单6 中的示例方法可供服务器根据清单5 中发送的数据调用。清单6. 处理服务器响应function updatePage() if (xmlHttp.readyState = 4) var response = xmlHttp.responseText; document.getElementById(zipCode).value = response; 这些代码同样既不难也不复杂。它等待服务器调用,如

32、果是就绪状态,则使用服务器返回的值(这里是用户输入的城市和州的ZIP 编码) 设置另一个表单字段的值。于是包含ZIP 编码的zipCode 字段突然出现了,而用户没有按任何按钮!这就是前面所说的桌面应用程序的感觉。快速响应、动态感受等等,这些都只因为有了小小的一段Ajax 代码。细心的读者可能注意到zipCode 是一个普通的文本字段。一旦服务器返回ZIP 编码,updatePage() 方法就用城市 /州的ZIP 编码设置那个字段的值,用户就可以改写该值。这样做有两个原因:保持例子简单,说明有时候可能希望用户能够修改服务器返回的数据。要记住这两点,它们对于好的用户界面设计来说很重要。连接We

33、b 表单还有什么呢?实际上没有多少了。一个JavaScript 方法捕捉用户输入表单的信息并将其发名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 42 页 - - - - - - - - - 送到服务器,另一个JavaScript 方法监听和处理响应,并在响应返回时设置字段的值。所有这些实际上都依赖于调用第一个JavaScript 方法,它启动了整个过程。最明显的办法是在 HTML 表单中增加一个按钮,但这是2001 年的办法, 您不这样认为吗?还是像清单7 这样利用Ja

34、vaScript 技术吧。清单7. 启动一个Ajax 过程 City: State: Zip Code: 如果感觉这像是一段相当普通的代码,那就对了,正是如此!当用户在city 或 state 字段中输入新的值时,callServer() 方法就被触发,于是Ajax 开始运行了。有点儿明白怎么回事了吧?好,就是如此!结束语现在您可能已经准备开始编写第一个Ajax 应用程序了,至少也希望认真读一下参考资料中 的 那 些 文 章 了 吧 ? 但 可 以 首 先 从 这 些 应 用 程 序 如 何 工 作 的 基 本 概 念 开 始 , 对XMLHttpRequest 对象有基本的了解。在下一期文章

35、中,您将掌握这个对象,学会如何处理JavaScript 和服务器的通信、如何使用HTML 表单以及如何获得DOM 句柄。现在先花点儿时间考虑考虑Ajax 应用程序有多么强大。设想一下, 当单击按钮、 输入一个字段、从组合框中选择一个选项或者用鼠标在屏幕上拖动时,Web 表单能够立刻作出响应会是什么情形。想一想异步究竟意味着什么,想一想JavaScript 代码运行而且不等待服务器对它的请求作出响应。会遇到什么样的问题?会进入什么样的领域?考虑到这种新的方法,编程的时候应如何改变表单的设计?如果在这些问题上花一点儿时间,与简单地剪切/粘贴某些代码到您根本不理解的应用程序中相比,收益会更多。在下一

36、期文章中,我们将把这些概念付诸实践,详细介绍使应用程序按照这种方式工作所需要的代码。因此,现在先享受一下Ajax 所带来的可能性吧。第 2 页使用JavaScript 和 Ajax 发出异步请求多数Web 应用程序都使用请求/响应模型从服务器上获得完整的HTML 页面。常常是点击一个按钮,等待服务器响应,再点击另一个按钮,然后再等待,这样一个反复的过程。有了Ajax 和XMLHttpRequest 对象,就可以使用不必让用户等待服务器响应的请求/响应模型了。本文中, Brett McLaughlin 介绍了如何创建能够适应不同浏览器的XMLHttpRequest 实例,建立和发送请求,并响应服

37、务器。本系列的上一期文章(请参阅参考资料中的链接),我们介绍了Ajax 应用程序,考察了推动Ajax 应用程序的基本概念。其中的核心是很多您可能已经了解的技术:JavaScript、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 42 页 - - - - - - - - - HTML 和 XHTML 、一点动态HTML 以及DOM (文档对象模型) 。本文将放大其中的一点,把目光放到具体的Ajax 细节上。本 文 中 , 您 将 开 始 接 触 最 基 本 和 基 础 性

38、 的 有 关Ajax 的 全 部 对 象 和 编 程 方 法 :XMLHttpRequest 对象。该对象实际上仅仅是一个跨越所有Ajax 应用程序的公共线程,您可能已经预料到,只有彻底理解该对象才能充分发挥编程的潜力。事实上,有时您会发现,要正确地使用XMLHttpRequest ,显然不能使用XMLHttpRequest 。这到底是怎么回事呢?Web 2.0 一瞥在深入研究代码之前首先看看最近的观点一定要十分清楚Web 2.0 这个概念。听到Web 2.0 这个词的时候, 应该首先问一问“ Web 1.0 是什么? ” 虽然很少听人提到Web 1.0,实际上它指的就是具有完全不同的请求和响

39、应模型的传统Web。比如,到A 网站上点击一个按钮或者输入搜索项。就会对服务器发送一个请求,然后响应再返回到浏览器。该请求不仅仅是图书和书目列表,而是另一个完整的HTML 页面。因此当Web 浏览器用新的HTML 页面重绘时,可能会看到闪烁或抖动。事实上,通过看到的每个新页面可以清晰地看到请求和响应。Web 2.0(在很大程度上)消除了这种看得见的往复交互。比如访问Google Maps 或 Flickr 这样的站点(到这些支持Web 2.0 和 Ajax 站点的链接请参阅参考资料)。比如在Google Maps 上,您可以拖动地图,放大和缩小,只有很少的重绘操作。当然这里仍然有请求和响应,只

40、不过都藏到了幕后。作为用户,体验更加舒适,感觉很像桌面应用程序。这种新的感受和范型就是当有人提到Web 2.0 时您所体会到的。需要关心的是如何使这些新的交互成为可能。显然, 仍然需要发出请求和接收响应,但正是针对每次请求 /响应交互的HTML 重绘造成了缓慢、 笨拙的Web 交互的感受。 因此很清楚,我们需要一种方法使发送的请求和接收的响应只包含需要的数据而不是整个HTML 页面。惟一需要获得整个新HTML 页面的时候就是希望用户看到新页面的时候。但多数交互都是在已有页面上增加细节、修改主体文本或者覆盖原有数据。这些情况下,Ajax 和 Web 2.0 方法允许在不更新整个HTML 页面的情

41、况下发送和接收数据。对于那些经常上网的人, 这种能力可以让您的应用程序感觉更快、响应更及时, 让他们不时地光顾您的网站。XMLHttpRequest 简介要真正实现这种绚丽的奇迹,必须非常熟悉一个JavaScript 对象,即XMLHttpRequest 。这个小小的对象实际上已经在几种浏览器中存在一段时间了,它是本专栏今后几个月中要介绍的 Web 2.0、Ajax 和大部分其他内容的核心。为了让您快速地大体了解它,下面给出将要用于该对象的很少的几个方法和属性。 open():建立到服务器的新请求。 send():向服务器发送请求。 abort():退出当前请求。名师资料总结 - - -精品资

42、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 42 页 - - - - - - - - - readyState:提供当前HTML 的就绪状态。 responseText:服务器返回的请求响应文本。如果不了解这些 (或者其中的任何一个),您也不用担心, 后面几篇文章中我们将介绍每个方法和属性。现在应该了解的是,明确用XMLHttpRequest 做什么。要注意这些方法和属性都与发送请求及处理响应有关。事实上,如果看到XMLHttpRequest 的所有方法和属性,就会发现它们都与非常简单的请求/响

43、应模型有关。显然,我们不会遇到特别新的GUI 对象或者创建用户交互的某种超极神秘的方法,我们将使用非常简单的请求和非常简单的响应。听起来似乎没有多少吸引力,但是用好该对象可以彻底改变您的应用程序。简单的new 首先需要创建一个新变量并赋给它一个XMLHttpRequest 对象实例。这在JavaScript 中很简单,只要对该对象名使用new 关键字即可,如清单 1 所示。清单1. 创建新的XMLHttpRequest 对象 var request = new XMLHttpRequest(); 不难吧?记住, JavaScript 不要求指定变量类型,因此不需要像清单2 那样做(在 Java

44、 语言中可能需要这样) 。清单2. 创建 XMLHttpRequest 的 Java 伪代码XMLHttpRequest request = new XMLHttpRequest(); 因此在JavaScript 中用var 创建一个变量,给它一个名字(如“request ”) ,然后赋给它一个新的XMLHttpRequest 实例。此后就可以在函数中使用该对象了。错误处理在实际上各种事情都可能出错,而上面的代码没有提供任何错误处理。较好的办法是创建该对象,并在出现问题时优雅地退出。比如,任何较早的浏览器(不论您是否相信,仍然有人在使用老版本的Netscape Navigator)都不支持XM

45、LHttpRequest ,您需要让这些用户知道有些地方出了问题。清单3 说明如何创建该对象,以便在出现问题的时候发出JavaScript 警告。清单3. 创建具有错误处理能力的XMLHttpRequest var request = false; try request = new XMLHttpRequest(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 42 页 - - - - - - - - - catch (failed) request = fals

46、e; if (!request) alert(Error initializing XMLHttpRequest!); 一定要理解这些步骤:1、创建一个新变量request 并赋值false。后面将使用false 作为判定条件,它表示还没有创建XMLHttpRequest 对象。2、增加try/catch 块: 1)尝试创建XMLHttpRequest 对象。 2)如果失败(catch (failed) )则保证request 的值仍然为false。3、检查request 是否仍为false(如果一切正常就不会是false) 。4、如果出现问题(request 是 false)则使用JavaS

47、cript 警告通知用户出现了问题。代码非常简单, 对大多数JavaScript 和 Web 开发人员来说, 真正理解它要比读写代码花更长的时间。现在已经得到了一段带有错误检查的XMLHttpRequest 对象创建代码,还可以告诉您哪儿出了问题。应付Microsoft 看起来似乎一切良好,至少在用Internet Explorer 试验这些代码之前是这样的。如果这样试验的话,就会看到图 1 所示的糟糕情形。图 1. Internet Explorer 报告错误名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

48、 - - - - - 第 12 页,共 42 页 - - - - - - - - - 显然有什么地方不对劲,而Internet Explorer 很难说是一种过时的浏览器,因为全世界有70% 在使用Internet Explorer 。换句话说,如果不支持Microsoft 和 Internet Explorer 就不会受到Web 世界的欢迎!因此我们需要采用不同的方法处理Microsoft 浏览器。经验证发现Microsoft 支持Ajax,但是其XMLHttpRequest 版本有不同的称呼。事实上,它将其称为几种不同的东西。如果使用较新版本的Internet Explorer ,则需要使

49、用对象Msxml2.XMLHTTP,而较老版本的Internet Explorer 则使用Microsoft.XMLHTTP。我们需要支持这两种对象类型(同时还要支持非Microsoft 浏览器)。请看看清单4,它在前述代码的基础上增加了对Microsoft 的支持。Microsoft 参与了吗?关于Ajax 和 Microsoft 对该领域不断增长的兴趣和参与已经有很多文章进行了介绍。事实上,据说Microsoft 最新版本的Internet Explorer version 7.0 ,将在2006 年下半年推出将 开 始 直 接 支 持XMLHttpRequest , 让 您 使 用new

50、 关 键 字 代 替 所 有 的Msxml2.XMLHTTP 创建代码。但不要太激动,仍然需要支持旧的浏览器,因此跨浏览器代码不会很快消失。清单4. 增加对Microsoft 浏览器的支持 var request = false; try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 42 页 - - - - - - - - - request = new XMLHttpRequest(); catch (trymicrosoft) try request = new

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com