﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-生命是一种过程-随笔分类-ajax</title><link>http://www.blogjava.net/love-java/category/6146.html</link><description>事情的结果尽管重要，但是做事情的过程更加重要，因为结果好了我们会更加快乐，但过程使我们的生命充实！</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:33:41 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:33:41 GMT</pubDate><ttl>60</ttl><item><title>[导入]AJAX基础教程</title><link>http://www.blogjava.net/love-java/archive/2005/12/19/24551.html</link><dc:creator>隐语者</dc:creator><author>隐语者</author><pubDate>Mon, 19 Dec 2005 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/love-java/archive/2005/12/19/24551.html</guid><wfw:comment>http://www.blogjava.net/love-java/comments/24551.html</wfw:comment><comments>http://www.blogjava.net/love-java/archive/2005/12/19/24551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/love-java/comments/commentRss/24551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/love-java/services/trackbacks/24551.html</trackback:ping><description><![CDATA[<H2 class=post-title>AJAX基础教程 </H2>
<DIV class=post-body>
<P class=code>本文来源于(有能够提供最初翻译者的朋友吗？)：<BR>http://developer.mozilla.org/en/docs/AJAX:Getting_Started&nbsp;<BR></P><BR>　　这篇文章将带您浏览整个AJAX的基本概貌,并展示两个简单的例子让您轻松上路. <BR><BR>　　什么是 AJAX? <BR>　　AJAX (异步 JavaScript 和 XML) 是个新产生的术语,专为描述JavaScript的两项强大性能.这两项性能在多年来一直被网络开发者所忽略,直到最近Gmail, Google suggest和google Maps的横空出世才使人们开始意识到其重要性. <BR><BR>　　这两项被忽视的性能是: <BR>　　无需重新装载整个页面便能向服务器发送请求. <BR>　　对XML文档的解析和处理．<BR><BR><FONT size=4><B>步骤 1 &#8211; "请!" --- 如何发送一个HTTP请求</B></FONT><BR><BR>　　为了用JavaScript向服务器发送一个HTTP请求, 需要一个具备这种功能的类实例. 这样的类首先由Internet Explorer以ActiveX对象引入, 被称为XMLHTTP. 后来Mozilla, Safari 和其他浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软的ActiveX对象所提供的方法和属性. <BR><BR>　　因此, 为了创建一个跨浏览器的这样的类实例(对象), 可以应用如下代码: <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">if&nbsp;(window.XMLHttpRequest)&nbsp;{&nbsp;//&nbsp;Mozilla,&nbsp;Safari,&nbsp;...<BR>&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<BR>}&nbsp;else&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{&nbsp;//&nbsp;IE<BR>&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<BR>}</FONT></P>　　(上例对代码做了一定简化,这是为了解释如何创建XMLHTTP类实例. 实际的代码实例可参阅本篇步骤3.) <BR><BR>　　如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作. 为了解决这个问题, 如果服务器响应的header不是text/xml,可以调用其它方法修改该header. <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">http_request&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<BR>http_request.overrideMimeType('text/xml');</FONT></P>　　接下来要决定当收到服务器的响应后,需要做什么.这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应.可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示: <BR><BR><FONT style="BACKGROUND-COLOR: #c0c0c0">http_request.onreadystatechange = nameOfTheFunction;</FONT> <BR><BR>　　注意:在函数名后没有括号,也无需传递参数.另外还有一种方法,可以在扉页(fly)中定义函数及其对响应要采取的行为,如下所示: <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">http_request.onreadystatechange&nbsp;=&nbsp;function(){<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;do&nbsp;the&nbsp;thing<BR>};</FONT></P>　　在定义了如何处理响应后,就要发送请求了.可以调用HTTP请求类的open()和send()方法, 如下所示: <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">http_request.open('GET',&nbsp;'http://www.example.org/some.file',&nbsp;true);<BR>http_request.send(null);</FONT></P>　　open()的第一个参数是HTTP请求方式 &#8211; GET, POST, HEAD 或任何服务器所支持的您想调用的方式. 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求.有关HTTP请求方法的详细信息可参考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs <BR>　　第二个参数是请求页面的URL.由于自身安全特性的限制,该页面不能为第三方域名的页面.同时一定要保证在所有的页面中都使用准确的域名,否则调用open()会得到"permission denied"的错误提示.一个常见的错误是访问站点时使用domain.tld,而当请求页面时,却使用www.domain.tld. <BR>　　第三个参数设置请求是否为异步模式.如果是TRUE, JavaScript函数将继续执行,而不等待服务器响应.这就是"AJAX"中的"A". <BR>　　如果第一个参数是"POST",send()方法的参数可以是任何想送给服务器的数据. 这时数据要以字符串的形式送给服务器,如下所示: <BR>
<P class=code>name=value&amp;anothername=othervalue&amp;so=on&nbsp;</P><BR><FONT size=4><B>步骤 2 &#8211; "收到!" --- 处理服务器的响应 </B></FONT><BR><BR>　　当发送请求时,要提供指定处理响应的JavaScript函数名. <BR>
<P class=code>http_request.onreadystatechange&nbsp;=&nbsp;nameOfTheFunction;&nbsp;</P>　　我们来看看这个函数的功能是什么.首先函数会检查请求的状态.如果状态值是4,就意味着一个完整的服务器响应已经收到了,您将可以处理该响应. <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">if&nbsp;(http_request.readyState&nbsp;==&nbsp;4)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;everything&nbsp;is&nbsp;good,&nbsp;the&nbsp;response&nbsp;is&nbsp;received<BR>}&nbsp;else&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;still&nbsp;not&nbsp;ready<BR>}</FONT></P>　　readyState的取值如下: <BR>　　0 (未初始化) <BR>　　1 (正在装载) <BR>　　2 (装载完毕) <BR>　　3 (交互中) <BR>　　4 (完成) <BR><BR>　　接着,函数会检查HTTP服务器响应的状态值. 完整的状态取值可参见 W3C site. 我们着重看值为200 OK的响应. <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">if&nbsp;(http_request.status&nbsp;==&nbsp;200)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;perfect!<BR>}&nbsp;else&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;there&nbsp;was&nbsp;a&nbsp;problem&nbsp;with&nbsp;the&nbsp;request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;for&nbsp;example&nbsp;the&nbsp;response&nbsp;may&nbsp;be&nbsp;a&nbsp;404&nbsp;(Not&nbsp;Found)<BR>&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;or&nbsp;500&nbsp;(Internal&nbsp;Server&nbsp;Error)&nbsp;response&nbsp;codes<BR>}</FONT></P>　　在检查完请求的状态值和响应的HTTP状态值后, 您就可以处理从服务器得到的数据了.有两种方式可以得到这些数据: <BR>
<P class=code>http_request.responseText&nbsp;&#8211;&nbsp;以文本字符串的方式返回服务器的响应&nbsp;<BR>http_request.responseXML&nbsp;&#8211;&nbsp;以XMLDocument对象方式返回响应.处理XMLDocument对象可以用JavaScript&nbsp;DOM函数&nbsp;</P><BR><FONT size=4><B>步骤 3 &#8211; "万事俱备!" - 简单实例</B></FONT><BR><BR>　　我们现在将整个过程完整地做一次,发送一个简单的HTTP请求. 我们用JavaScript请求一个HTML文件, test.html, 文件的文本内容为"I'm a test.".然后我们"alert()"test.html文件的内容. <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">&lt;script&nbsp;type="text/javascript"&nbsp;language="javascript"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;http_request&nbsp;=&nbsp;false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;makeRequest(url)&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;false;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(window.XMLHttpRequest)&nbsp;{&nbsp;//&nbsp;Mozilla,&nbsp;Safari,...<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;new&nbsp;XMLHttpRequest();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(http_request.overrideMimeType)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.overrideMimeType('text/xml');<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(window.ActiveXObject)&nbsp;{&nbsp;//&nbsp;IE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;new&nbsp;ActiveXObject("Msxml2.XMLHTTP");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(e)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request&nbsp;=&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(e)&nbsp;{}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!http_request)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('Giving&nbsp;up&nbsp;:(&nbsp;Cannot&nbsp;create&nbsp;an&nbsp;XMLHTTP&nbsp;instance');<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.onreadystatechange&nbsp;=&nbsp;alertContents;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.open('GET',&nbsp;url,&nbsp;true);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request.send(null);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;alertContents()&nbsp;{<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(http_request.readyState&nbsp;==&nbsp;4)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(http_request.status&nbsp;==&nbsp;200)&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(http_request.responseText);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('There&nbsp;was&nbsp;a&nbsp;problem&nbsp;with&nbsp;the&nbsp;request.');<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&lt;/script&gt;<BR>&lt;span<BR>&nbsp;&nbsp;&nbsp;&nbsp;style="cursor:&nbsp;pointer;&nbsp;text-decoration:&nbsp;underline"<BR>&nbsp;&nbsp;&nbsp;&nbsp;onclick="makeRequest('test.html')"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Make&nbsp;a&nbsp;request<BR>&lt;/span&gt;</FONT></P><BR>　　本例中: <BR>　　用户点击浏览器上的"请求"链接; <BR>　　接着函数makeRequest()将被调用.其参数 &#8211; HTML文件test.html在同一目录下; <BR>　　这样就发起了一个请求.onreadystatechange的执行结果会被传送给alertContents(); <BR>　　alertContents()将检查服务器的响应是否成功地收到,如果是,就会"alert()"test.html文件的内容. <BR><BR><FONT size=4><B>步骤 4 &#8211; "X-文档" --- 处理XML响应</B></FONT><BR><BR>　　在前面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性.该属性包含了test.html文件的内容.现在我们来试试responseXML属性. <BR><BR>　　首先,我们新建一个有效的XML文件,后面我们将使用这个文件.该文件(test.xml)源代码如下所示: <BR>
<P class=code>&lt;?xml&nbsp;version="1.0"&nbsp;?&gt;<BR>&lt;root&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;I'm&nbsp;a&nbsp;test.<BR>&lt;/root&gt;</P>　　在该脚本中,我们只需修改请求部分: <BR>
<P class=code>...<BR>onclick="makeRequest('test.xml')"&gt;<BR>...</P>　　接着,在alertContents()中,我们将alert()的代码alert(http_request.responseText);换成: <BR>
<P class=code><FONT style="BACKGROUND-COLOR: #c0c0c0">　　var&nbsp;xmldoc&nbsp;=&nbsp;http_request.responseXML;<BR>　　var&nbsp;root_node&nbsp;=&nbsp;xmldoc.getElementsByTagName('root').item(0);<BR>　　alert(root_node.firstChild.data);</FONT><BR></P><BR>　　这里,我们使用了responseXML提供的XMLDocument对象并用DOM方法获取存于XML文件中的内容.</DIV><br>文章来源:<a href='http://java.mblogger.cn/love_java/posts/20112.aspx'>http://java.mblogger.cn/love_java/posts/20112.aspx</a><img src ="http://www.blogjava.net/love-java/aggbug/24551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/love-java/" target="_blank">隐语者</a> 2005-12-19 09:34 <a href="http://www.blogjava.net/love-java/archive/2005/12/19/24551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>