AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。
AJAX 不是新的編程語(yǔ)言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法。
AJAX 最大的優(yōu)點(diǎn)是在不重新加載整個(gè)頁(yè)面的情況下,可以與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)內(nèi)容。
AJAX 不需要任何瀏覽器插件,但需要用戶(hù)允許JavaScript在瀏覽器上執(zhí)行。
AJAX 實(shí)例
使用 AJAX 修改該文本內(nèi)容
閱讀本教程前,您需要了解的知識(shí):
閱讀本教程,您需要有以下基礎(chǔ):
- HTML 和 CSS 基礎(chǔ)
- JavaScript 基礎(chǔ)
AJAX 應(yīng)用
- 運(yùn)用XHTML+CSS來(lái)表達(dá)資訊;
- 運(yùn)用JavaScript操作DOM(Document Object Model)來(lái)執(zhí)行動(dòng)態(tài)效果;
- 運(yùn)用XML和XSLT操作資料;
- 運(yùn)用XMLHttpRequest或新的Fetch API與網(wǎng)頁(yè)服務(wù)器進(jìn)行異步資料交換;
- 注意:AJAX與Flash、Silverlight和Java Applet等RIA技術(shù)是有區(qū)分的。
AJAX 簡(jiǎn)介
?AJAX 是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)。
您應(yīng)當(dāng)具備的基礎(chǔ)知識(shí)
在繼續(xù)學(xué)習(xí)之前,您需要對(duì)下面的知識(shí)有基本的了解:
- HTML / XHTML
- CSS
- JavaScript / DOM
什么是 AJAX ?
AJAX = 異步 JavaScript 和 XML。
AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)。
通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
傳統(tǒng)的網(wǎng)頁(yè)(不使用 AJAX)如果需要更新內(nèi)容,必需重載整個(gè)網(wǎng)頁(yè)面。
有很多使用 AJAX 的應(yīng)用程序案例:新浪微博、Google 地圖、開(kāi)心網(wǎng)等等。
AJAX 工作原理

AJAX是基于現(xiàn)有的Internet標(biāo)準(zhǔn)
AJAX是基于現(xiàn)有的Internet標(biāo)準(zhǔn),并且聯(lián)合使用它們:
- XMLHttpRequest 對(duì)象 (異步的與服務(wù)器交換數(shù)據(jù))
- JavaScript/DOM (信息顯示/交互)
- CSS (給數(shù)據(jù)定義樣式)
- XML (作為轉(zhuǎn)換數(shù)據(jù)的格式)
AJAX應(yīng)用程序與瀏覽器和平臺(tái)無(wú)關(guān)的!
Google Suggest
在 2005 年,Google 通過(guò)其 Google Suggest 使 AJAX 變得流行起來(lái)。
Google Suggest 使用 AJAX 創(chuàng)造出動(dòng)態(tài)性極強(qiáng)的 web 界面:當(dāng)您在谷歌的搜索框輸入關(guān)鍵字時(shí),JavaScript 會(huì)把這些字符發(fā)送到服務(wù)器,然后服務(wù)器會(huì)返回一個(gè)搜索建議的列表。
今天就開(kāi)始使用 AJAX
AJAX 基于已有的標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)已被大多數(shù)開(kāi)發(fā)者使用多年。
請(qǐng)閱讀下一章,看看 AJAX 是如何工作的!
AJAX 實(shí)例
實(shí)例
使用 AJAX 修改該文本內(nèi)容
AJAX 實(shí)例解析
上面的 AJAX 應(yīng)用程序包含一個(gè) div 和一個(gè)按鈕。
div 部分用于顯示來(lái)自服務(wù)器的信息。當(dāng)按鈕被點(diǎn)擊時(shí),它負(fù)責(zé)調(diào)用名為 loadXMLDoc() 的函數(shù):
<div id="myDiv"><h2>使用 AJAX 修改該文本內(nèi)容</h2></div>
<button type="button" onclick="loadXMLDoc()">修改內(nèi)容</button>
接下來(lái),在頁(yè)面的 head 部分添加一個(gè) <script> 標(biāo)簽。該標(biāo)簽中包含了這個(gè) loadXMLDoc() 函數(shù):
<head>
<script>
function loadXMLDoc(){ .... AJAX 腳本執(zhí)行 ...}
</script>
</head>
下面的章節(jié)會(huì)為您講解 AJAX 的工作原理。
AJAX - 創(chuàng)建 XMLHttpRequest 對(duì)象
XMLHttpRequest 是 AJAX 的基礎(chǔ)。
XMLHttpRequest 對(duì)象
所有現(xiàn)代瀏覽器均支持 XMLHttpRequest 對(duì)象(IE5 和 IE6 使用 ActiveXObject)。
XMLHttpRequest 用于在后臺(tái)與服務(wù)器交換數(shù)據(jù)。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
創(chuàng)建 XMLHttpRequest 對(duì)象
所有現(xiàn)代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)均內(nèi)建 XMLHttpRequest 對(duì)象。
創(chuàng)建 XMLHttpRequest 對(duì)象的語(yǔ)法:
var iable=new XMLHttpRequest();
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對(duì)象:
var iable=new ActiveXObject("Microsoft.XMLHTTP");
為了應(yīng)對(duì)所有的現(xiàn)代瀏覽器,包括 IE5 和 IE6,請(qǐng)檢查瀏覽器是否支持 XMLHttpRequest 對(duì)象。如果支持,則創(chuàng)建 XMLHttpRequest 對(duì)象。如果不支持,則創(chuàng)建 ActiveXObject :
實(shí)例
var xmlhttp;
if (window.XMLHttpRequest){
// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
xmlhttp=new XMLHttpRequest();
}else{
// IE6, IE5 瀏覽器執(zhí)行代碼
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
嘗試一下 ?
在下一章中,您將學(xué)習(xí)發(fā)送服務(wù)器請(qǐng)求的知識(shí)。
AJAX - 向服務(wù)器發(fā)送請(qǐng)求請(qǐng)求
XMLHttpRequest 對(duì)象用于和服務(wù)器交換數(shù)據(jù)。
向服務(wù)器發(fā)送請(qǐng)求
如需將請(qǐng)求發(fā)送到服務(wù)器,我們使用 XMLHttpRequest 對(duì)象的 open() 和 send() 方法:
xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

GET 還是 POST?
與 POST 相比,GET 更簡(jiǎn)單也更快,并且在大部分情況下都能用。
然而,在以下情況中,請(qǐng)使用 POST 請(qǐng)求:
- 無(wú)法使用緩存文件(更新服務(wù)器上的文件或數(shù)據(jù)庫(kù))
- 向服務(wù)器發(fā)送大量數(shù)據(jù)(POST 沒(méi)有數(shù)據(jù)量限制)
- 發(fā)送包含未知字符的用戶(hù)輸入時(shí),POST 比 GET 更穩(wěn)定也更可靠
GET 請(qǐng)求
一個(gè)簡(jiǎn)單的 GET 請(qǐng)求:
實(shí)例
xmlhttp.open("GET","/try/ajax/demo_get.php",true);
xmlhttp.send();
嘗試一下 ?
在上面的例子中,您可能得到的是緩存的結(jié)果。
為了避免這種情況,請(qǐng)向 URL 添加一個(gè)唯一的 ID:
實(shí)例
xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
xmlhttp.send();
如果您希望通過(guò) GET 方法發(fā)送信息,請(qǐng)向 URL 添加信息:
實(shí)例
xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
xmlhttp.send();
POST 請(qǐng)求
一個(gè)簡(jiǎn)單 POST 請(qǐng)求:
實(shí)例
xmlhttp.open("POST","/try/ajax/demo_post.php",true);
xmlhttp.send();
嘗試一下 ?
如果需要像 HTML 表單那樣 POST 數(shù)據(jù),請(qǐng)使用 setRequestHeader() 來(lái)添加 HTTP 頭。然后在 send() 方法中規(guī)定您希望發(fā)送的數(shù)據(jù):
實(shí)例
xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford");

url - 服務(wù)器上的文件
open() 方法的 url 參數(shù)是服務(wù)器上文件的地址:
xmlhttp.open("GET","ajax_test.html",true);
該文件可以是任何類(lèi)型的文件,比如 .txt 和 .xml,或者服務(wù)器腳本文件,比如 .asp 和 .php (在傳回響應(yīng)之前,能夠在服務(wù)器上執(zhí)行任務(wù))。
異步 - True 或 False?
AJAX 指的是異步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
XMLHttpRequest 對(duì)象如果要用于 AJAX 的話(huà),其 open() 方法的 async 參數(shù)必須設(shè)置為 true:
xmlhttp.open("GET","ajax_test.html",true);
對(duì)于 web 開(kāi)發(fā)人員來(lái)說(shuō),發(fā)送異步請(qǐng)求是一個(gè)巨大的進(jìn)步。很多在服務(wù)器執(zhí)行的任務(wù)都相當(dāng)費(fèi)時(shí)。AJAX 出現(xiàn)之前,這可能會(huì)引起應(yīng)用程序掛起或停止。
通過(guò) AJAX,JavaScript 無(wú)需等待服務(wù)器的響應(yīng),而是:
- 在等待服務(wù)器響應(yīng)時(shí)執(zhí)行其他腳本
- 當(dāng)響應(yīng)就緒后對(duì)響應(yīng)進(jìn)行處理
Async=true
當(dāng)使用 async=true 時(shí),請(qǐng)規(guī)定在響應(yīng)處于 onreadystatechange 事件中的就緒狀態(tài)時(shí)執(zhí)行的函數(shù):
實(shí)例
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();
嘗試一下 ?
您將在稍后的章節(jié)學(xué)習(xí)更多有關(guān) onreadystatechange 的內(nèi)容。
Async = false
如需使用 async=false,請(qǐng)將 open() 方法中的第三個(gè)參數(shù)改為 false:
xmlhttp.open("GET","test1.txt",false);
我們不推薦使用 async=false,但是對(duì)于一些小型的請(qǐng)求,也是可以的。
請(qǐng)記住,JavaScript 會(huì)等到服務(wù)器響應(yīng)就緒才繼續(xù)執(zhí)行。如果服務(wù)器繁忙或緩慢,應(yīng)用程序會(huì)掛起或停止。
注意:當(dāng)您使用 async=false 時(shí),請(qǐng)不要編寫(xiě) onreadystatechange 函數(shù) - 把代碼放到 send() 語(yǔ)句后面即可:
實(shí)例
xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
AJAX - 服務(wù)器 響應(yīng)
服務(wù)器響應(yīng)
如需獲得來(lái)自服務(wù)器的響應(yīng),請(qǐng)使用 XMLHttpRequest 對(duì)象的 responseText 或 responseXML 屬性。
| 屬性 | 描述 |
|---|---|
| responseText | 獲得字符串形式的響應(yīng)數(shù)據(jù)。 |
| responseXML | 獲得 XML 形式的響應(yīng)數(shù)據(jù)。 |
responseText 屬性
如果來(lái)自服務(wù)器的響應(yīng)并非 XML,請(qǐng)使用 responseText 屬性。
responseText 屬性返回字符串形式的響應(yīng),因此您可以這樣使用:
實(shí)例
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
responseXML 屬性
如果來(lái)自服務(wù)器的響應(yīng)是 XML,而且需要作為 XML 對(duì)象進(jìn)行解析,請(qǐng)使用 responseXML 屬性:
實(shí)例
請(qǐng)求 cd_catalog.xml 文件,并解析響應(yīng):
xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;
AJAX - onreadystatechange 事件
onreadystatechange 事件
當(dāng)請(qǐng)求被發(fā)送到服務(wù)器時(shí),我們需要執(zhí)行一些基于響應(yīng)的任務(wù)。
每當(dāng) readyState 改變時(shí),就會(huì)觸發(fā) onreadystatechange 事件。
readyState 屬性存有 XMLHttpRequest 的狀態(tài)信息。
下面是 XMLHttpRequest 對(duì)象的三個(gè)重要的屬性:

在 onreadystatechange 事件中,我們規(guī)定當(dāng)服務(wù)器響應(yīng)已做好被處理的準(zhǔn)備時(shí)所執(zhí)行的任務(wù)。
當(dāng) readyState 等于 4 且狀態(tài)為 200 時(shí),表示響應(yīng)已就緒:
實(shí)例
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
嘗試一下 ?
注意: onreadystatechange 事件被觸發(fā) 5 次(0 - 4),對(duì)應(yīng)著 readyState 的每個(gè)變化。
使用回調(diào)函數(shù)
回調(diào)函數(shù)是一種以參數(shù)形式傳遞給另一個(gè)函數(shù)的函數(shù)。
如果您的網(wǎng)站上存在多個(gè) AJAX 任務(wù),那么您應(yīng)該為創(chuàng)建 XMLHttpRequest 對(duì)象編寫(xiě)一個(gè)標(biāo)準(zhǔn)的函數(shù),并為每個(gè) AJAX 任務(wù)調(diào)用該函數(shù)。
該函數(shù)調(diào)用應(yīng)該包含 URL 以及發(fā)生 onreadystatechange 事件時(shí)執(zhí)行的任務(wù)(每次調(diào)用可能不盡相同):
實(shí)例
function myFunction(){
loadXMLDoc("/try/ajax/ajax_info.txt",function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}
AJAX ASP/PHP 實(shí)例
AJAX 用于創(chuàng)造動(dòng)態(tài)性更強(qiáng)的應(yīng)用程序。
AJAX ASP/PHP 實(shí)例
下面的例子將為您演示當(dāng)用戶(hù)在輸入框中鍵入字符時(shí),網(wǎng)頁(yè)如何與 web 服務(wù)器進(jìn)行通信: 請(qǐng)?jiān)谙旅娴妮斎肟蛑墟I入字母(A - Z):

實(shí)例解析 - showHint() 函數(shù)
當(dāng)用戶(hù)在上面的輸入框中鍵入字符時(shí),會(huì)執(zhí)行函數(shù) "showHint()" 。該函數(shù)由 "onkeyup" 事件觸發(fā):
function showHint(str){
var xmlhttp;
if (str.length==0) {
document.getElementById("txtHint").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
xmlhttp=new XMLHttpRequest();
} else {
// IE6, IE5 瀏覽器執(zhí)行代碼
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/gethint.php?q="+str,true);
xmlhttp.send();
}
源代碼解析:
如果輸入框?yàn)榭?(str.length==0),則該函數(shù)清空 txtHint 占位符的內(nèi)容,并退出函數(shù)。
如果輸入框不為空,showHint() 函數(shù)執(zhí)行以下任務(wù):
- 創(chuàng)建 XMLHttpRequest 對(duì)象
- 當(dāng)服務(wù)器響應(yīng)就緒時(shí)執(zhí)行函數(shù)
- 把請(qǐng)求發(fā)送到服務(wù)器上的文件
- 請(qǐng)注意我們向 URL 添加了一個(gè)參數(shù) q (帶有輸入框的內(nèi)容)
AJAX 服務(wù)器頁(yè)面 - ASP 和 PHP
由上面的 JavaScript 調(diào)用的服務(wù)器頁(yè)面是 ASP 文件,名為 "gethint.asp"。
下面,我們創(chuàng)建了兩個(gè)版本的服務(wù)器文件,一個(gè)用 ASP 編寫(xiě),另一個(gè)用 PHP 編寫(xiě)。
ASP 文件
"gethint.asp" 中的源代碼會(huì)檢查一個(gè)名字?jǐn)?shù)組,然后向?yàn)g覽器返回相應(yīng)的名字:
<%
response.expires=-1
dim a(30)
'Fill up array with names
a(1)="Anna"
a(2)="Brittany"
a(3)="Cinderella"
a(4)="Diana"
a(5)="Eva"
a(6)="Fiona"
a(7)="Gunda"
a(8)="Hege"
a(9)="Inga"
a(10)="Johanna"
a(11)="Kitty"
a(12)="Linda"
a(13)="Nina"
a(14)="Ophelia"
a(15)="Petunia"
a(16)="Amanda"
a(17)="Raquel"
a(18)="Cindy"
a(19)="Doris"
a(20)="Eve"
a(21)="Evita"
a(22)="Sunniva"
a(23)="Tove
a(24)="Unni"
a(25)="Violet"
a(26)="Liza"
a(27)="Elizabeth"
a(28)="Ellen"
a(29)="Wenche"
a(30)="Vicky"
'get the q parameter from URL
q=ucase(request.querystring("q"))
'lookup all hints from array if length of q>0
if len(q)>0 then
hint=""
for i=1 to 30
if q=ucase(mid(a(i),1,len(q))) then
if hint="" then
hint=a(i)
else
hint=hint & " , " & a(i)
end if
end if
next
end if
'Output "no suggestion" if no hint were found
'or output the correct values
if hint="" then
response.write("no suggestion")
else
response.write(hint)end if
%>
PHP 文件
下面的代碼用 PHP 編寫(xiě),與上面的 ASP 代碼作用是一樣的。
<?php
// Fill up array with names
$a[]="Anna";
$a[]="Brittany";
$a[]="Cinderella";
$a[]="Diana";
$a[]="Eva";
$a[]="Fiona";
$a[]="Gunda";
$a[]="Hege";
$a[]="Inga";
$a[]="Johanna";
$a[]="Kitty";
$a[]="Linda";
$a[]="Nina";
$a[]="Ophelia";
$a[]="Petunia";
$a[]="Amanda";
$a[]="Raquel";
$a[]="Cindy";
$a[]="Doris";
$a[]="Eve";
$a[]="Evita";
$a[]="Sunniva";
$a[]="Tove";
$a[]="Unni";
$a[]="Violet";
$a[]="Liza";
$a[]="Elizabeth";
$a[]="Ellen";
$a[]="Wenche";
$a[]="Vicky";
//get the q parameter from URL
$q=$_GET["q"];
//lookup all hints from array if length of q>0
if (strlen($q) > 0){
$hint="";
for($i=0; $i<count($a); $i++) {
if (strtolower($q)==strtolower(substr($a[$i],0,strlen($q)))) {
if ($hint=="") {
$hint=$a[$i];
} else {
$hint=$hint." , ".$a[$i];
}
}
}
}
// Set output to "no suggestion" if no hint were found
// or to the correct values
if ($hint == ""){
$response="no suggestion";
}else{
$response=$hint;
}
//output the response
echo $response;
?>
AJAX Database 實(shí)例
AJAX 可用來(lái)與數(shù)據(jù)庫(kù)進(jìn)行動(dòng)態(tài)通信。
AJAX 數(shù)據(jù)庫(kù)實(shí)例
下面的例子將演示網(wǎng)頁(yè)如何通過(guò) AJAX 從數(shù)據(jù)庫(kù)讀取信息: 請(qǐng)?jiān)谙旅娴南吕斜碇羞x擇一個(gè)客戶(hù):

實(shí)例解釋 - showCustomer() 函數(shù)
當(dāng)用戶(hù)在上面的下拉列表中選擇某個(gè)客戶(hù)時(shí),會(huì)執(zhí)行名為 "showCustomer()" 的函數(shù)。該函數(shù)由 "onchange" 事件觸發(fā):
function showCustomer(str){
var xmlhttp;
if (str=="") {
document.getElementById("txtHint").innerHTML=""; return;
}
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
xmlhttp=new XMLHttpRequest();
} else {
// IE6, IE5 瀏覽器執(zhí)行代碼
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/getcustomer.php?q="+str,true);
xmlhttp.send();
}
showCustomer() 函數(shù)執(zhí)行以下任務(wù):
- 檢查是否已選擇某個(gè)客戶(hù)
- 創(chuàng)建 XMLHttpRequest 對(duì)象
- 當(dāng)服務(wù)器響應(yīng)就緒時(shí)執(zhí)行所創(chuàng)建的函數(shù)
- 把請(qǐng)求發(fā)送到服務(wù)器上的文件
- 請(qǐng)注意我們向 URL 添加了一個(gè)參數(shù) q (帶有輸入域中的內(nèi)容)
AJAX 服務(wù)器頁(yè)面
由上面的 JavaScript 調(diào)用的服務(wù)器頁(yè)面是 PHP 文件,名為 "getcustomer.php"。
用 PHP 編寫(xiě)服務(wù)器文件也很容易,或者用其他服務(wù)器語(yǔ)言。請(qǐng)看用 PHP 編寫(xiě)的相應(yīng)的例子。
"getcustomer.php" 中的源代碼負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),然后用 HTML 表格返回結(jié)果:
<%
response.expires=-1
sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="
sql=sql & "'" & request.querystring("q") & "'"
set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("/db/northwind.mdb"))
set rs=Server.CreateObject("ADODB.recordset")
rs.Open sql,conn
response.write("<table>")
do until rs.EOF
for each x in rs.Fields
response.write("<tr><td><b>" & x.name & "</b></td>")
response.write("<td>" & x.value & "</td></tr>")
next
rs.MoveNext
loop
response.write("</table>")
%>
AJAX XML 實(shí)例
AJAX 可用來(lái)與 XML 文件進(jìn)行交互式通信。
AJAX XML 實(shí)例
下面的例子將演示網(wǎng)頁(yè)如何使用 AJAX 來(lái)讀取來(lái)自 XML 文件的信息:

實(shí)例解析 - loadXMLDoc() 函數(shù)
當(dāng)用戶(hù)點(diǎn)擊上面的"獲取我收藏的 CD"這個(gè)按鈕,就會(huì)執(zhí)行 loadXMLDoc() 函數(shù)。
loadXMLDoc() 函數(shù)創(chuàng)建 XMLHttpRequest 對(duì)象,添加當(dāng)服務(wù)器響應(yīng)就緒時(shí)執(zhí)行的函數(shù),并將請(qǐng)求發(fā)送到服務(wù)器。
當(dāng)服務(wù)器響應(yīng)就緒時(shí),會(huì)構(gòu)建一個(gè) HTML 表格,從 XML 文件中提取節(jié)點(diǎn)(元素),最后使用 XML 數(shù)據(jù)的 填充 id="demo" 的表格元素:
// LoadXMLDoc()
function loadDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
myFunction(this);
}
};
xhttp.open("GET", "cd_catalog.xml", true);
xhttp.send();
}
function myFunction(xml) {
var i;
var xmlDoc = xml.responseXML;
var table="<tr><th>Artist</th><th>Title</th></tr>";
var x = xmlDoc.getElementsByTagName("CD");
for (i = 0; i <x.length; i++) {
table += "<tr><td>" +
x[i].getElementsByTagName("ARTIST")[0].childNodes[0].nodeValue +
"</td><td>" +
x[i].getElementsByTagName("TITLE")[0].childNodes[0].nodeValue +
"</td></tr>";
}
document.getElementById("demo").innerHTML = table;
}
AJAX 服務(wù)器頁(yè)面
上面這個(gè)例子中使用的服務(wù)器頁(yè)面實(shí)際上是一個(gè)名為 "cd_catalog.xml" XML 文件。
AJAX 實(shí)例
一個(gè)簡(jiǎn)單的AJAX實(shí)例
創(chuàng)建一個(gè)簡(jiǎn)單的XMLHttpRequest,從一個(gè)TXT文件中返回?cái)?shù)據(jù)。
用AJAX加載 XML 文件
創(chuàng)建一個(gè)簡(jiǎn)單的XMLHttpRequest,從一個(gè)XML文件中返回?cái)?shù)據(jù)。
用AJAX進(jìn)行一次 HEAD 請(qǐng)求
檢索資源(文件)的頭信息。
用AJAX進(jìn)行一次指定的 HEAD 請(qǐng)求
檢索資源(文件)的指定頭信息。
用AJAX從ASP 文件返回?cái)?shù)據(jù)
當(dāng)用戶(hù)在文本框內(nèi)鍵入字符時(shí)網(wǎng)頁(yè)如何與Web服務(wù)器進(jìn)行通信
用AJAX從數(shù)據(jù)庫(kù)返回?cái)?shù)據(jù)
用AJAX網(wǎng)頁(yè)如何獲取數(shù)據(jù)庫(kù)中的信息
用AJAX從XML 文件返回?cái)?shù)據(jù)
創(chuàng)建一個(gè)XMLHttpRequest從XML文件中檢索數(shù)據(jù)并顯示在一個(gè)HTML表格中。
用callback函數(shù)的AJAX實(shí)例
用一個(gè)callback函數(shù)創(chuàng)建一個(gè)XMLHttpRequest,并從一個(gè)TXT文件中檢索數(shù)據(jù)。