<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_jevonsea</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/56117/rss</id><updated>2011-05-23T06:53:58Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/56117/rss"/><entry><id>http://www.cnblogs.com/jevonsea/archive/2011/05/23/2054330.html</id><title type="text">ajax入门详解</title><summary type="text">l一个实例在开始正式讲解 Ajax之前，首先让我们先来看看Google Map使用Ajax改善其产品设计的效果。1．在浏览器地址栏中输入http://maps.google.com打开Google Map的界面。2．在页面顶端的搜索框中输入“China”，单击“Search”按钮。3．单击地图右上角的“Satellite”按钮，切换到卫星界面。4．调整地图左上角的尺寸，方法或者缩小当前区域。可以看到，地图区域的图象根据标尺的位置快速的变换。5．按住鼠标左键，拖拽地图，地图区域的图象随着鼠标的移动而移动这个过程的图象是实时更新的。效果如下图所。由上可以明显的看出，当用户拖动地图进行操作的时候，W</summary><published>2011-05-23T06:54:00Z</published><updated>2011-05-23T06:54:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2011/05/23/2054330.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2011/05/23/2054330.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 16pt; font-family: Wingdings"&gt;l&amp;nbsp;&lt;/span&gt;一个实例&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt"&gt;在开始正式讲解&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Ajax&lt;/span&gt;之前，首先让我们先来看看&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Google Map&lt;/span&gt;使用&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax&lt;/span&gt;改善其产品设计的效果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;1．&amp;nbsp;&lt;/span&gt;在浏览器地址栏中输入&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;http://maps.google.com&lt;/span&gt;打开&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Google Map&lt;/span&gt;的界面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;2．&amp;nbsp;&lt;/span&gt;在页面顶端的搜索框中输入&amp;#8220;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;China&lt;/span&gt;&amp;#8221;，单击&amp;#8220;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Search&lt;/span&gt;&amp;#8221;按钮。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;3．&amp;nbsp;&lt;/span&gt;单击地图右上角的&amp;#8220;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Satellite&lt;/span&gt;&amp;#8221;按钮，切换到卫星界面。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;4．&amp;nbsp;&lt;/span&gt;调整地图左上角的尺寸，方法或者缩小当前区域。可以看到，地图区域的图象根据标尺的位置快速的变换。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;5．&amp;nbsp;&lt;/span&gt;按住鼠标左键，拖拽地图，地图区域的图象随着鼠标的移动而移动这个过程的图象是实时更新的。效果如下图所。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;img alt="" src="http://dl.iteye.com/upload/attachment/228831/f4990e59-5559-3508-a4c3-f543972176a5.jpg" /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 19pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 19pt"&gt;由上可以明显的看出，当用户拖动地图进行操作的时候，&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Web&lt;/span&gt;页上的地图立即发生相应的变化，页面却没有刷新，当按住鼠标左键移动地图的时候，地图跟着移动，这个过程是快速的，而期间用户没有想服务器提交表单或和单击一个超链接。如果用传统的&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Web&lt;/span&gt;应用程序交互思维来理解，这个过程是难以理解的，这正是&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax&lt;/span&gt;的魅力。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16pt; font-family: Wingdings"&gt;l&lt;/span&gt;什么是&lt;span style="font-size: 16pt"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt"&gt;在研究&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;ajax&lt;/span&gt;之前首先让我们先来讨论一个问题&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; &amp;#8212;&amp;#8212;&lt;/span&gt;什么是&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Web 2.0 &lt;/span&gt;。听到&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web 2.0 &lt;/span&gt;这个词的时候，应该首先问一问&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; &amp;#8220;Web 1.0 &lt;/span&gt;是什么？&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&amp;#8221; &lt;/span&gt;虽然很少听人提到&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web 1.0&lt;/span&gt;，实际上它指的就是具有完全不同的请求和响应模型的传统&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web&lt;/span&gt;。比如，到&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; hdu.edu.cn &lt;/span&gt;网站上点击一个按钮。就会对服务器发送一个请求，然后响应再返回到浏览器。该请求不仅仅是新内容和项目列表，而是另一个完整的&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;页面。因此当&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web &lt;/span&gt;浏览器用新的&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;页面重绘时，可能会看到闪烁或抖动。事实上，通过看到的每个新页面可以清晰地看到请求和响应。&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Web 2.0&lt;/span&gt;（在很大程度上）消除了这种看得见的往复交互。比如在&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Google Maps &lt;/span&gt;上，你可以拖动地图，放大和缩小，只有很少的重绘操作。当然这里仍然有请求和响应，只不过都藏到了幕后。作为用户，体验更加舒适，感觉很像桌面应用程序。这种新的感受和范型就是当有人提到&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web 2.0 &lt;/span&gt;时您所体会到的。&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;　　需要关心的是如何使这些新的交互成为可能。显然，仍然需要发出请求和接收响应，但正是针对每次请求&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;/&lt;/span&gt;响应交互的&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;重绘造成了缓慢、笨拙的&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web &lt;/span&gt;交互的感受。因此很清楚，我们需要一种方法使发送的请求和接收的响应只 包含需要的数据而不是整个&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;页面。惟一需要获得整个新&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;页面的时候就是希望用户看到 新页面的时候。&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;　　但多数交互都是在已有页面上增加细节、修改主体文本或者覆盖原有数据。这些情况下，&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax &lt;/span&gt;和&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; Web 2.0 &lt;/span&gt;方法允许在不 更新整个&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; HTML &lt;/span&gt;页面的情况下发送和接收数据。对于那些经常上网的人，这种能力可以让您的应用程序感觉更快、响应更及时，让他们不时地光顾您的网站。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt"&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt"&gt;因此在这里，我们是时候可以对&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;ajax&lt;/span&gt;做出一个完整的解释了，&lt;span style="font-size: small"&gt;&lt;span style="color: #000000; font-family: Verdana"&gt;Adaptive Path&lt;/span&gt;公司的&lt;span style="color: #000000; font-family: Verdana"&gt;Jesse James Garrett&lt;/span&gt;这样&lt;span style="color: #000000; font-family: Verdana"&gt;&lt;a href="http://www.adaptivepath.com/publications/essays/archives/000385.php" target="_blank"&gt;&lt;span&gt;定义&lt;/span&gt;&lt;span style="color: #000000"&gt;Ajax&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt"&gt;Ajax不是一种技术。实际上，它由几种蓬勃发展的技术以新的强大方式组合而成。Ajax包含：&lt;/p&gt;&#xD;
&lt;ul type="disc"&gt;&lt;li style="color: black"&gt;基于&lt;a href="http://www.w3.org/TR/xhtml1/" target="_blank"&gt;&lt;span style="color: #000000"&gt;XHTML&lt;/a&gt;&lt;/span&gt;和&lt;a href="http://www.w3.org/Style/CSS/" target="_blank"&gt;&lt;span style="color: #000000"&gt;CSS&lt;/a&gt;&lt;/span&gt;标准的表示；&lt;/li&gt;&lt;li style="color: black"&gt;使用&lt;a href="http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/introduction.html" target="_blank"&gt;&lt;span style="color: #000000"&gt;Document Object Model&lt;/a&gt;&lt;/span&gt;进行动态显示和交互；&lt;/li&gt;&lt;li style="color: black"&gt;使用XMLHttpRequest与服务器进行异步通信；&lt;/li&gt;&lt;li style="color: black"&gt;使用JavaScript绑定一切。 &lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;这非常好，但为什么要以Ajax命名呢？其实术语Ajax是由Jesse James Garrett创造的，他说它是&amp;#8220;Asynchronous JavaScript + XML的简写&amp;#8221;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16pt; font-family: Wingdings"&gt;l&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 16pt"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt;&lt;/span&gt;工作原理&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt; text-indent: 14.25pt"&gt;通过上述的定义，我们应该已经知道Ajax的组成了，即他是由XHTML，XML，CSS，DOM，XMLHttpRequest,JavaScript等技术综合而成的，然而，真正使用Ajax能实现异步通信，要真正实现这种绚丽的奇迹，必须非常熟悉一个&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;JavaScript &lt;/span&gt;对象，即&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt; XMLHttpRequest&lt;/span&gt;。因此我们要了解&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax&lt;/span&gt;的工作原理&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;,&lt;/span&gt;就要从理解&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;XMLHttpRequest&lt;/span&gt;这个对象开始。&lt;/p&gt;&#xD;
&lt;p style="margin: 0cm 0cm 0pt 21pt; text-indent: 14.25pt"&gt;下面给出将要用于该对象的很少的几个 方法和属性。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; &amp;#183;open()&lt;/span&gt;：建立到服务器的新请求。&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#183;send()&lt;/span&gt;：向服务器发送请求。&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#183;abort()&lt;/span&gt;：退出当前请求。&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;　　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#183;readyState&lt;/span&gt;：提供当前&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; HTML &lt;/span&gt;的就绪状态。&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt; &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;　　&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#183;responseText&lt;/span&gt;：服务器返回的请求响应文本。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 33.25pt" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#8216;onreadystatechange:&lt;/span&gt;回调方法&lt;/p&gt;&#xD;
&lt;p style="text-indent: 24.2pt" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;&amp;#183;responseXML&lt;/span&gt;：服务器返回的请求响应&lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;XML&lt;/span&gt;形式组织的文本。&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&amp;nbsp;&lt;/span&gt;下面我们简单的介绍一下这几个方法的作用。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9.5pt; color: #000000; font-family: Wingdings"&gt;l&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;创建一个&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;XMLHttpRequest&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; margin: 0cm 0cm 12pt; line-height: 150%"&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;首先需要创建一个新变量并赋给它一个&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;对象实例。这在&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; JavaScript &lt;/span&gt;中很简单，只要对该对象名使用&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; new &lt;/span&gt;关键字即可，如下代码所示。&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;script language="javascript" type="text/javascript"&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var request = new XMLHttpRequest();&lt;br /&gt;&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/script&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　在&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; JavaScript &lt;/span&gt;中用&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; var &lt;/span&gt;创建一个变量，给它一个名字（如&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &amp;#8220;request&amp;#8221;&lt;/span&gt;），然后赋给它一个新的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;实例。此后就可以在函数中使用该对象了。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　&lt;strong&gt;错误处理&lt;/strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　在实际上各种事情都可能出错，而上面的代码没有提供任何错误处理。较好的办法是创建该对象，并在出现问题时优雅地退出。比如，任何较早的浏览器都不支持&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest&lt;/span&gt;，您需要让这些用户知道有些地方出了问题。下面&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;js&lt;/span&gt;代码通过创建&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;getXMLHttpRequest()&lt;/span&gt;方法说明如何创建该对象。&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;代码&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;1&lt;/span&gt;：一个详细的&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest&lt;/span&gt;对象的创建&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;script language="javascript" type="text/javascript"&lt;/span&gt;＞&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;function getXMLHttpRequest(){&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var request = false;&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;try {&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new XMLHttpRequest();&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;} catch (trymicrosoft) {&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;try {&lt;br /&gt;&lt;/span&gt;　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;} catch (othermicrosoft) {&lt;br /&gt;&lt;/span&gt;　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;try {&lt;br /&gt;&lt;/span&gt;　　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;&lt;/span&gt;　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;} catch (failed) {&lt;br /&gt;&lt;/span&gt;　　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = false;&lt;br /&gt;&lt;/span&gt;　　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;}&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;}&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;}&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;return request;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;}&lt;br /&gt;&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/script&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　一定要理解这些步骤：&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　创建一个新变量&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; request &lt;/span&gt;并赋值&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false&lt;/span&gt;。后面将使用&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false &lt;/span&gt;作为判定条件，它表示还没有创建&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;对象。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;&lt;/span&gt;增加&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; try/catch &lt;/span&gt;块：&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;&lt;/span&gt;尝试创建&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;对象。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;br /&gt;&lt;/span&gt;　　　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;1&lt;/span&gt;、如果失败（&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;catch (failed)&lt;/span&gt;）则保证&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; request &lt;/span&gt;的值仍然为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false&lt;/span&gt;。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;br /&gt;&lt;/span&gt;　　　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;2&lt;/span&gt;、检查&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; request &lt;/span&gt;是否仍为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false&lt;/span&gt;（如果一切正常就不会是&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false&lt;/span&gt;）。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;&lt;/span&gt;如果出现问题则&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;request &lt;/span&gt;返回&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; false&lt;/span&gt;。 &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19pt; line-height: 150%" align="left"&gt;此外，在上面的代码中，我们是不是注意到了一个问题，就是当&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new XMLHttpRequest();&lt;/span&gt;出现异常的时候，在&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;catch&lt;/span&gt;语句中我们用了&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new ActiveXObject("Msxml2.XMLHTTP");&lt;/span&gt;和&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request = new ActiveXObject("Microsoft.XMLHTTP");&lt;/span&gt;等语句进行对象获取，这是针对&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;IE&lt;/span&gt;浏览器而进行的操作，因为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;IE&lt;/span&gt;浏览器对&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;版本有不同的称呼。事实上，它将其称为几种 不同的东西。如果使用较新版本的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Internet Explorer&lt;/span&gt;，则需要使用对象&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Msxml2.XMLHTTP&lt;/span&gt;，而较老版本的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Internet Explorer &lt;/span&gt;则使用&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Microsoft.XMLHTTP&lt;/span&gt;。我们需要支持这两种对象类型（同时还要支持非&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Microsoft &lt;/span&gt;浏览器）。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Wingdings"&gt;l&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;strong&gt;用&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;发送请求&lt;/strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　得到请求对象之后就可以进入请求&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;/&lt;/span&gt;响应循环了。&lt;span style="color: #993366"&gt;记住，&lt;/span&gt;&lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest &lt;/span&gt;惟一的目的是让您发送请求和接收响应。其他一切都是&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;a href="http://www.qqread.com/keywords/javascript.html" target="_blank"&gt;&lt;span style="font-size: 8.5pt; color: windowtext; line-height: 150%"&gt;JavaScript&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;、&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;a href="http://www.qqread.com/keywords/css.html" target="_blank"&gt;&lt;span style="font-size: 8.5pt; color: windowtext; line-height: 150%"&gt;CSS&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;或页面中其他代码的工作：改变用户界面、切换图像、解释服务器返回的数据。准备好&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;之后，就可以向服务器发送请求了。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;Ajax &lt;/span&gt;采用一种沙箱安全模型。因此，&lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;Ajax &lt;/span&gt;代码（具体来说就是&lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt; XMLHttpRequest &lt;/span&gt;对象）只能对所在的同一个域发送请求。如果让&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Ajax &lt;/span&gt;代码在&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;www.hdu.edu.cn &lt;/span&gt;上运行，则必须&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; www.hdu.edu.cn &lt;/span&gt;中运行的脚本发送请求。&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　&lt;strong&gt;设置服务器&lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　首先要确定连接的服务器的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL&lt;/span&gt;。这并不是&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Ajax &lt;/span&gt;的特殊要求，但仍然是建立连接所必需的。多数应用程序中都会结合一些静态数据和用户处理的表单中的数据来构造该&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL&lt;/span&gt;。比如，下列&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; JavaScript &lt;/span&gt;代码获取电话号码字段的值并用其构造&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;代码&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;2&lt;/span&gt;：　建立请求&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt; URL&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;script language="javascript" type="text/javascript"&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;function getCustomerInfo() {&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var phone = document.getElementById("phone").value;&lt;br /&gt;&lt;/span&gt;　&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var url = "/cgi-local/lookupCustomer.jsp?phone=" + escape(phone);&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/script&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　首先，代码创建了一个新变量&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; phone&lt;/span&gt;，并把&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; ID &lt;/span&gt;为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &amp;#8220;phone&amp;#8221; &lt;/span&gt;的表单字段的值赋给它。下列代码展示了这个表单的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; &lt;a href="http://www.qqread.com/keywords/xhtml.html" target="_blank"&gt;&lt;span style="text-decoration: underline"&gt;&lt;span style="font-size: 8.5pt; color: #006ff7; line-height: 150%"&gt;XHTML&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;，其中可以看到&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; phone &lt;/span&gt;字段及其&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; id &lt;/span&gt;属性。　　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;代码&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;3&lt;/span&gt;：&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt; Break Neck Pizza &lt;/span&gt;表单&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;body&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;form action="POST"&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;Enter your phone number:&lt;br /&gt;&lt;/span&gt;　　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;input type="text" size="14" name="phone" id="phone" onChange="getCustomerInfo();" /&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;Your order will be delivered to:&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;div id="address"&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/div&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;Type your order in here:&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;p&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;textarea name="order" rows="6" cols="50" id="order"&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/textarea&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;p&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;input type="submit" value="Order Pizza" id="submit" /&lt;/span&gt;＞＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/p&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/form&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;＜&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;/body&lt;/span&gt;＞&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　还要注意，当用户输入电话号码或者改变电话号码时，将触发&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;getCustomerInfo() &lt;/span&gt;方法。该方法取得电话号码并构造存储在&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; url &lt;/span&gt;变量中的&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL &lt;/span&gt;字符串。由于&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; Ajax &lt;/span&gt;代码是沙箱型的，因而只能连接到同一个域，实际上&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; URL &lt;/span&gt;中不需要域名。该例中的脚本名为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; /cgi-local/lookupCustomer.jsp&lt;/span&gt;。最后，电话号码作为&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt; GET &lt;/span&gt;参数附加到该脚本中：&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;"phone=" + escape(phone)&lt;/span&gt;。　&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;strong&gt;打开请求 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19.5pt; line-height: 150%" align="left"&gt;有了要连接的 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;URL &lt;/span&gt;后就可以配置请求了。可以用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest &lt;/span&gt;对象的 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;span style="color: #993366"&gt;open()&lt;/span&gt; &lt;/span&gt;方法来完成。该方法有五个参数： &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;request-type&lt;/span&gt; ：发送请求的类型。典型的值是 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;GET &lt;/span&gt;或 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;POST&lt;/span&gt; ，但也可以发送 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;HEAD &lt;/span&gt;请求。 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;url&lt;/span&gt; ：要连接的 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;URL&lt;/span&gt; 。 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;asynch&lt;/span&gt; ：如果希望使用异步连接则为 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;true&lt;/span&gt; ，否则为 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;false&lt;/span&gt; 。该参数是可选的，默认为 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;true&lt;/span&gt; 。 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;username&lt;/span&gt; ：如果需要身份验证，则可以在此指定用户名。该可选参数没有默认值。 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #993366; line-height: 150%; font-family: Tahoma"&gt;&amp;#183;password&lt;/span&gt; ：如果需要身份验证，则可以在此指定口令。该可选参数没有默认值。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　通常使用其中的前三个参数。事实上，即使需要异步连接，也应该指定第三个参数为 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#8220;true&amp;#8221;&lt;/span&gt; 。这是默认值，但坚持明确指定请求是异步的还是同步的更容易理解。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　将这些结合起来，通常会得到 下列所示的一行代码。 &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19.5pt; line-height: 150%" align="left"&gt;代码 &lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;4 getCustomerInfo()&lt;/span&gt; 方法的改进： &lt;/p&gt;&#xD;
&lt;p style="background: white; margin: 0cm 0cm 0pt 9.45pt; text-indent: 9.9pt; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;function getCustomerInfo() {&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var phone = document.getElementById("phone").value;&lt;br /&gt;&amp;nbsp;var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.open("GET", url, true);&lt;br /&gt;}&lt;/span&gt; &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;&lt;em&gt;　 &lt;/em&gt;&lt;em&gt;　&lt;span&gt;open() 是打开吗？&lt;/span&gt; &lt;/em&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;em&gt;　　我们对&lt;span&gt; open() 方法到底做什么没有达成一致。但它实际上并不是 打开一个请求。如果监控 XHTML/Ajax 页面及其连接脚本之间的网络和数据传递，当调用 open() 方法时将看不到任何通信。&lt;/span&gt; &lt;/em&gt;&lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19pt; line-height: 150%" align="left"&gt;一旦设置好了&lt;span&gt; URL ，其他就简单了。多数请求使用 GET 就够了，再加上 URL ，这就是使用 open() 方法需要的全部内容了。&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;strong&gt;发送请求 &lt;/strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　一旦用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;open() &lt;/span&gt;配置好之后，就可以发送请求了。幸运的是，发送请求的方法的名称要比 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;open() &lt;/span&gt;适当，它就是 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send()&lt;/span&gt; 。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;只有一个参数，就是要发送的内容。但是在考虑这个方法之前，回想一下前面已经通过 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;URL &lt;/span&gt;本身发送过数据了： &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var url = "/cgi-local/lookupCustomer.jsp?phone=" + escape(phone);&lt;br /&gt;&lt;/span&gt;　　虽然可以使用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;发送数据，但也能通过 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;URL &lt;/span&gt;本身发送数据。事实上， &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;GET &lt;/span&gt;请求（在典型的 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;Ajax &lt;/span&gt;应用中大约占 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;80%&lt;/span&gt; ）中，用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;URL &lt;/span&gt;发送数据要容易得多。如果需要发送安全信息或 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;XML&lt;/span&gt; ，可能要考虑使用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;发送内容（关于如何使用POST方式安全的发送数据，请参考我的另外一篇文章--&lt;a href="http://www.iteye.com/blog/637695" target="_blank"&gt;POST方式发送ajax请求详解&lt;/a&gt; ）。如果不需要通过 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;传递数据，则只要传递 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;null &lt;/span&gt;作为该方法的参数即可。 &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;代码 &lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;5&amp;nbsp;getCustomerInfo()&lt;/span&gt; 方法的进一步改进： &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 9.5pt; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;function getCustomerInfo() {&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var phone = document.getElementById("phone").value;&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.open("GET", url, true);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.send(null);&lt;br /&gt;}&lt;/span&gt; &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;指定回调方法 &lt;/strong&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　现在我们所做的只有很少一点是新的、革命性的或异步的。必须承认， &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;open() &lt;/span&gt;方法中 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#8220;true&amp;#8221; &lt;/span&gt;这个小小的关键字建立了异步请求。但是 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;Ajax &lt;/span&gt;和 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;Web 2.0 &lt;/span&gt;最大的秘密是什么呢？秘密就在于 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest &lt;/span&gt;的一个简单属性 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;span style="color: #800080"&gt;onreadystatechange&lt;/span&gt; &lt;/span&gt;。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　首先一定要理解这些代码中的流程（&lt;span style="color: #800080"&gt;如果需要请回顾 &lt;/span&gt;代码 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;5&lt;/span&gt; ）。建立其请求然后发出请求。此外，因为是异步请求，所以 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;a href="http://www.qqread.com/keywords/javascript.html" target="_blank"&gt;&lt;span style="font-size: 8.5pt; color: #000000; line-height: 150%; text-decoration: none"&gt;JavaScript &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;方法（例子中的 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;getCustomerInfo()&lt;/span&gt; ）不会等待服务器。因此代码将继续执行，就是说，将退出该方法而把控制返回给表单。用户可以继续输入信息，应用程序不会等待服务器。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　这就提出了一个有趣的问题：服务器完成了请求之后会发生什么？答案是什么也不发生，至少对现在的代码而言如此！显然这样不行，因此服务器在完成通过 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest &lt;/span&gt;发送给它的请求处理之后需要某种指示说明怎么做。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　现在 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;onreadystatechange &lt;/span&gt;属性该登场了。该属性允许指定一个回调函数。回调允许服务器（猜得到吗？）反向调用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;Web &lt;/span&gt;页面中的代码。它也给了服务器一定程度的控制权，当服务器完成请求之后，会查看 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;XMLHttpRequest &lt;/span&gt;对象，特别是 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;onreadystatechange &lt;/span&gt;属性。然后调用该属性指定的任何方法。之所以称为回调是因为服务器向网页发起调用，无论网页本身在做什么。比方说，可能在用户坐在椅子上手没有碰键盘的时候调用该方法，但是也可能在用户输入、移动鼠标、滚动屏幕或者点击按钮时调用该方法。它并不关心用户在做什么。 这就是称之为异步的原因：用户在一层上操作表单，而在另一层上服务器响应请求并触发 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;onreadystatechange &lt;/span&gt;属性指定的回调方法。 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;em&gt;在 &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;JavaScript &lt;/span&gt;&lt;/em&gt;&lt;em&gt;中引用函数 &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;em&gt;　　 &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;JavaScript &lt;/span&gt;&lt;/em&gt;&lt;em&gt;是一种弱类型的语言，可以用变量引用任何东西。因此如果声明了一个函数 &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;updatePage()&lt;/span&gt; &lt;/em&gt;&lt;em&gt;， &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;JavaScript &lt;/span&gt;&lt;/em&gt;&lt;em&gt;也将该函数名看作是一个变量。换句话说，可用变量名 &lt;/em&gt;&lt;em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;updatePage &lt;/span&gt;&lt;/em&gt;&lt;em&gt;在代码中引用函数。 &lt;/em&gt;&lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　&lt;span style="color: #ff0000"&gt;代码 &lt;/span&gt;&lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;6. &lt;/span&gt;设置回调方法 &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19pt; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;function getCustomerInfo() {&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var phone = document.getElementById("phone").value;&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;var url = "/cgi-local/lookupCustomer.php?phone=" + escape(phone);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.open("GET", url, true);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.onreadystatechange = updatePage;&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; line-height: 150%; font-family: Tahoma"&gt;request.send(null);&lt;br /&gt;&amp;nbsp;}&lt;/span&gt; &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　需要特别注意的是该属性在代码中设置的位置 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;&amp;#8212;&amp;#8212; &lt;/span&gt;它是在调用 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;之前 设置的。发送请求之前必须设置该属性，这样服务器在回答完成请求之后才能查看该属性。 &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19pt; line-height: 150%" align="left"&gt;现在剩下的就只有编写 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;updatePage() &lt;/span&gt;方法了。 &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;代码 &lt;span style="font-size: 9.5pt; color: #ff0000; line-height: 150%; font-family: Tahoma"&gt;7. &lt;/span&gt;检查就绪状态 &lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;function updatePage() {&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;if (request.readyState == 4)&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (request.status == 200)&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; alert("Server is done!");&lt;br /&gt;}&lt;/span&gt; &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;其中 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;request.readyState&lt;/span&gt; 是 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;HTTP&lt;/span&gt; 的就绪状态，在这里我们大概需要了解这 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;5&lt;/span&gt; 种状态，关于其详细意义，我们在这就不在做深入研究了。 &lt;/p&gt;&#xD;
&lt;p style="background: white; text-indent: 19.5pt; line-height: 150%" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;request.readyState == 0&lt;/span&gt; ：请求没有发出（在调用 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;open() &lt;/span&gt;之前）。 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;request.readyState == 1&lt;/span&gt; ：请求已经建立但还没有发出（调用 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;send() &lt;/span&gt;之前）。 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;request.readyState == 2&lt;/span&gt; ：请求已经发出正在处理之中（这里通常可以从响应得到内容头部）。 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;&amp;nbsp;request.readyState ==3&lt;/span&gt; ：请求已经处理，响应中通常有部分数据可用，但是服务器还没有完成响应。 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #800080; line-height: 150%; font-family: Tahoma"&gt;request.readyState == 4&lt;/span&gt; ：响应已完成，可以访问服务器响应并使用它。 &lt;/p&gt;&#xD;
&lt;p style="background: white; line-height: 150%" align="left"&gt;而接下来的 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;request.status&lt;/span&gt; 为 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;HTTP&lt;/span&gt; 状态码，为 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;200&lt;/span&gt; 的时候为正常， &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;400&lt;/span&gt; 多的时候为客户端的错误， &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;500&lt;/span&gt; 多的时候为服务器端的服务，如果您对这方面的知识感兴趣，不妨可以去借一些 &lt;span style="font-size: 9.5pt; line-height: 150%; font-family: Tahoma"&gt;HTTP&lt;/span&gt; 协议之类的书看看，这里也不做深入研究了。 &lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&lt;span style="font-weight: normal; font-size: 9.5pt; line-height: 150%; font-family: Wingdings"&gt;l&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;读取响应文本 &lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;当我们成功做完上面的一切时，服务器最后给出了处理的响应，我们可以把响应的内容 以 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;responseText&lt;/span&gt; 或者 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;responseXML&lt;/span&gt; 形式组织返回给客户端供其调用。 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;responseXML&lt;/span&gt; 的话，要涉及到对 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;XML&lt;/span&gt; 的操作，因为 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;jdk&lt;/span&gt; 本身对 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;XML&lt;/span&gt; 的操作比较弱，不过我们可以运用第三方的包 &lt;span style="font-size: 9.5pt; color: #800080; font-family: Tahoma"&gt;org.jdom&lt;/span&gt; （网上有的下载），如果大家有兴趣，可以自己去研究，这里我们简单的给出一个 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;responseXML&lt;/span&gt; 的用法的例子 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;代码 &lt;span style="font-size: 9.5pt; color: #ff0000; font-family: Tahoma"&gt;8. responseText &lt;/span&gt;的简单运用 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.5pt" align="left"&gt;&lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;function updatePage() {&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;&amp;nbsp;if (request.readyState == 4) {&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;if (request.status == 200) {&lt;br /&gt;&lt;/span&gt;　　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;var response = request.responseText.split("|");&lt;br /&gt;&lt;/span&gt;　　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;document.getElementById("order").value = response[0];&lt;br /&gt;&lt;/span&gt;　　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;document.getElementById("address").innerHTML = response[1].replace(/\n/g, "");&lt;br /&gt;&lt;/span&gt;　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;} else&lt;br /&gt;&lt;/span&gt;　　　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;alert("status is " + request.status);&lt;br /&gt;&lt;/span&gt;　 &lt;span style="font-size: 9.5pt; color: #008000; font-family: Tahoma"&gt;}&lt;br /&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt; &lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;&lt;br /&gt;&lt;/span&gt;到现在，相信大家一定对 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax&lt;/span&gt; 有了一个系统的了解了吧，仅仅只是讲了 &lt;span style="font-size: 9.5pt; font-family: Tahoma"&gt;Ajax&lt;/span&gt; 的一些最基础的东西，如果您对这个有兴趣，还可以进行进一步的深入研究。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16pt; font-family: Wingdings"&gt;l&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 16pt"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;应用场景 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%"&gt;然而 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;不是万能的，在适合的场合使用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;，才能充分发挥它的长处，改善系统性能和用户体验，绝不可以为了技术而滥用。 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;的特点在于异步交互，动态更新 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;web&lt;/span&gt; &lt;/span&gt;页面，因此它的适用范围是交互较多，频繁读取数据的 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;web&lt;/span&gt; &lt;/span&gt;应用。现在来看几个 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;的应用实例，读者可以了解如何使用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;技术改进现有的 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;web&lt;/span&gt; &lt;/span&gt;应用系统。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.05pt; line-height: 150%" align="left"&gt;&lt;strong&gt;场景 &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;1.&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;数据验证 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%" align="left"&gt;在填写表单内容时，需要保证数据的唯一性（例如新用户注册填写的用户名），因此必须对用户输入的内容进行数据验证。数据验证通常有两种方式：一种是直接填写，然后提交表单，这种方式需要将这个页面提交到服务器端进行验证，整个过程不仅时间长而且造成了服务器不必要的负担；第二种方式是改进了的验证过程，用户可以通过点击相应的验证按钮，打开新窗口查看验证结果，但是这样需要新开一个浏览器窗口或者对话框，还需要专门编写验证的页面，比较耗费系统资源。而使用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;技术，可以由 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;XMLHttpRequest&lt;/span&gt; &lt;/span&gt;对象发出验证请求，根据返回的 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;HTTP&lt;/span&gt; &lt;/span&gt;响应判断验证是否成功，整个过程不需要弹出新窗口，也不需要将整个页面提交到服务器，快速而又不加重服务器负担。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.05pt; line-height: 150%" align="left"&gt;&lt;strong&gt;场景 &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;2.&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;按需取数据 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%" align="left"&gt;分类树或者树形结构在 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;web&lt;/span&gt; &lt;/span&gt;应用系统中使用得非常广泛，例如部门结构，文档得分类结构常常使用树形空间呈现。以前每次对分类树得操作都会引起页面重载，为了避免这种情况出现，一般不采用每次调用后台得方式，而是一次性将分类结果中得数据一次性读取出来并写入数组，然后根据用户的操作，用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;JavaScript&lt;/span&gt; &lt;/span&gt;来控制节点的呈现，这样虽然解决了操作响应速度，不重复载入页面以及避免向服务器频繁发送请求的问题，但是如果用户不对分类进行操作或者只对分类树中的一部分数据进行操作的话（这种情况很普遍的），那么读取的数据中就会有相当大的冗余，浪费了用户的资源。特别是在分类结构复杂，数据庞大的情况下，这种弊端就更加明显了。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%" align="left"&gt;现在应用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;改进分类树的实现机制。在初始化页面时，只获取第一级子分类的数据并且显示；当用户点开一级分类的第一节点时，页面会通过 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;向服务器请求当前分类所属的二级子分类的所有数据；如果再请求已经呈现的二级分类的某一节点时，再次向服务器请求当前分类所属的三级子分类的所有数据，以此类推。页面会根据用户的操作向服务器请求它所需要的数据，这样就不会存在数据的冗余，减少了数据下载总量。同时，更新页面时不需要重载所有内容，只更新需要更新的那部分内容即可，相对于以前后台处理并且重载的方式，大大缩短了用户的等待时间。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19.05pt; line-height: 150%" align="left"&gt;&lt;strong&gt;场景 &lt;/strong&gt;&lt;strong&gt;&lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;3.&lt;/span&gt; &lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;自动更新页面 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%" align="left"&gt;在 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;web&lt;/span&gt; &lt;/span&gt;应用中有很多数据的变化时十分迅速的，例如最新的热点新闻，天气预报以及聊天室内容等。在 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;出现之前，用户为了即使了解相应的内容必须不断刷新页面，查看是否有新的内容变化，或者页面本身实现定时刷新的功能（大多数聊天室页面就是这样做的）。有可能会发生这种情况；有一段时间网页的内容没有发生任何变化，但是用户并不知道，仍然不断的刷新页面；或者用户失去了耐心，放弃了刷新页面，却很有可能在此有新的消息出现，这样就错过了第一时间得到消息的机会。 &lt;/p&gt;&#xD;
&lt;p style="text-indent: 19pt; line-height: 150%" align="left"&gt;应用 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;可以改善这种这种情况，页面加载以后，会通过 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;Ajax&lt;/span&gt; &lt;/span&gt;引擎在后台进行定时的轮询，向服务器发送请求，查看是否有最新的消息。如果有则将新的数据（而不是所有数据）下载并且在页面上进行动态的更新，通过一定的方式通知用户（实现这样的功能正是 &lt;span style="font-size: 9.5pt; color: #000000; line-height: 150%"&gt;&lt;span style="font-family: Times New Roman"&gt;JavaScript&lt;/span&gt; &lt;/span&gt;的强项）。这样即避免了用户不断手工刷新页面的不便，也不会因为重复刷新页面造成资源浪费。 &lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jevonsea/aggbug/2054330.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jevonsea/archive/2011/05/23/2054330.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535522.html</id><title type="text">oracle账户被锁定问题</title><summary type="text">今天连接oracle服务器，在cmd中以sys账户可正确连到oracle，但以system账户却提示the account is locked!为什么无缘无故账户被锁，不知是何原因？以sys账户登录，执行alter user system account unlock;语句后再次以system登录，却提示账户密码不正确，只好重新设定密码，再次以sys账户登录，并执行alter user syste...</summary><published>2009-07-30T14:29:00Z</published><updated>2009-07-30T14:29:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535522.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535522.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535492.html</id><title type="text">oracle远程连接配置</title><summary type="text">今日需要对站内所有的空间数据做入库处理，所以在服务器上安装了oracle，在本地需要对其进行连接，在网上查阅了相关资料，整理如下：远程服务端配置：1. 数据库配置 因为要为外界客户端提供数据服务,所以一定要将 [数据库操作模式] 配置为 "共享服务模式". 我就是犯了这个错误,将操作模式配置成了"专用服务器模式",导至远程客户端无法正常连接. 如果不能确定数据库的操作模式,可以打开ORACLE "...</summary><published>2009-07-30T13:32:00Z</published><updated>2009-07-30T13:32:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535492.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/07/30/1535492.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/07/10/1520685.html</id><title type="text">自定义AJAX请求获取地图范围</title><summary type="text">该程序功能的实现过程大致是这样的： 在更新地图范围时，通过向服务器发送AJAX请求，在后台实现该特定请求的监听，获取相应的地图信息后，通过XML形式返回客户端，客户端也实现了相应的JS函数利用返回的xmlhttp参数对浏览页面进行更新。 首先需要给地图控件添加监听器，当指定事件发生时调用指定函数处理该业务功能，这段初始化的JS函数需要在body的load事件发生时即调用，JS代码如下：[代码]接下...</summary><published>2009-07-10T09:07:00Z</published><updated>2009-07-10T09:07:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/07/10/1520685.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/07/10/1520685.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/06/27/1512452.html</id><title type="text">ArcGIS Server9.3无法登录ArcGIS Manager，提示Incorrect Login Information?</title><summary type="text">解决办法：1、去掉简单文件共享。2、关闭windows防火墙。网上有人讲是因为没有配置Web Application Postinstall，因为GIS Server Postinstall会在安装后自动跳出请求配置，而前者一般用户会忘记配置，但我真是没发现如何对其进行配置，并且没有配置也已成功登录到Manager，还请高手指点！</summary><published>2009-06-27T14:54:00Z</published><updated>2009-06-27T14:54:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/06/27/1512452.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/06/27/1512452.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/06/01/1494040.html</id><title type="text">JDK环境配置</title><summary type="text">心血来潮学习下JAVA的开发，先把环境搭起来！JDK的最新版本可以从sun网上下载，而JDK环境的正确配置就是设置以下三个环境变量：JAVA_HOME: D:"Program Files"Java"jdk1.5.0_15Path: %JAVA_HOME%"bin;%JAVA_HOME%"jre"binCLASSPATH: .;%JAVA_HOME%"lib;%JAVA_HOME%"lib"tool...</summary><published>2009-06-01T13:39:00Z</published><updated>2009-06-01T13:39:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/06/01/1494040.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/06/01/1494040.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/05/20/1472329.html</id><title type="text">AE开发中IClassify接口的访问违反异常？</title><summary type="text">按照AE文档中的说明，使用IClassify接口的代码如下：[代码]可是调试时，会报这样的错误：通过google后，发现解决办法是：将Classify方法提到SetHistogramData之前。这是为什么呢(小沈阳)？</summary><published>2009-05-20T13:17:00Z</published><updated>2009-05-20T13:17:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/05/20/1472329.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/05/20/1472329.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/05/18/1459581.html</id><title type="text">HDF库的调试过程</title><summary type="text">经过几天的不断尝试，终于将HDF库调试成功了，其间收获颇丰，切身感受学习开源GIS对于提高自己的二次开发能力的重要作用，因为一个开源GIS软件涉及到很多东西！ 现将编译的步骤记录下来，以待将来查看！ 整个过程由五个部分分别实现，如下： （一）编译准备阶段（二）编译和安装后所得的内容 （三）生成和测试HDF5的库和相关工具 （四）生成库中自带的例子（五）如何将HDF5的static library和...</summary><published>2009-05-18T10:03:00Z</published><updated>2009-05-18T10:03:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/05/18/1459581.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/05/18/1459581.html"/></entry><entry><id>http://www.cnblogs.com/jevonsea/archive/2009/05/11/1454245.html</id><title type="text">PythonWin运行出错解决办法</title><summary type="text">问题：运行PythonWin，敲入入门经典第一程序"print 'Hello World'"，点击运行...发生错误，需要调试？？？误信息如下：Pythonwin.exe-应用程序错误"0x01049a92"指令引用的"0x00000000"内存。该内存不能为"written"&amp;#8230;&amp;#8230;解决办法：是Pythonwin的安装目录下Lib\site-packages\pythonwi...</summary><published>2009-05-11T08:24:00Z</published><updated>2009-05-11T08:24:00Z</updated><author><name>jevonsea</name><uri>http://www.cnblogs.com/jevonsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jevonsea/archive/2009/05/11/1454245.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jevonsea/archive/2009/05/11/1454245.html"/></entry></feed>
