Ajax入門-簡(jiǎn)易教程
AJAX簡(jiǎn)介:
AJAX 指異步 JavaScript 及 XML(Asynchronous JavaScript And XML)。
JAX 不是一種新的編程語(yǔ)言,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的 Web 應(yīng)用程序的技術(shù)。
通過(guò) AJAX,你可以創(chuàng)建更好、更快以及更友好的 WEB 應(yīng)用程序。
AJAX 基于 JavaScript 和 HTTP 請(qǐng)求(HTTP requests)。
----------------------------------------------------------------------------------------------
AJAX = 異步 JavaScript 及 XML(Asynchronous JavaScript and XML)
通過(guò) AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 對(duì)象來(lái)直接與服務(wù)器進(jìn)行通信。通過(guò)這個(gè)對(duì)象,您的 JavaScript 可在不重載頁(yè)面的情況與 Web 服務(wù)器交換數(shù)據(jù)。
AJAX 在瀏覽器與 Web 服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP 請(qǐng)求),這樣就可使網(wǎng)頁(yè)從服務(wù)器請(qǐng)求少量的信息,而不是整個(gè)頁(yè)面。
AJAX 可使因特網(wǎng)應(yīng)用程序更小、更快,更友好。
AJAX 是一種獨(dú)立于 Web 服務(wù)器軟件的瀏覽器技術(shù)。
----------------------------------------------------------------------------------------------
AJAX 使用 Http 請(qǐng)求
在傳統(tǒng)的 JavaScript 編程中,假如您希望從服務(wù)器上的文件或數(shù)據(jù)庫(kù)中得到任何的信息,或者向服務(wù)器發(fā)送信息的話,就必須利用一個(gè) HTML 表單向服務(wù)器 GET 或 POST 數(shù)據(jù)。而用戶則需要單擊“提交”按鈕來(lái)發(fā)送/獲取信息,等待服務(wù)器的響應(yīng),然后一張新的頁(yè)面會(huì)加載結(jié)果。
由于每當(dāng)用戶提交輸入后服務(wù)器都會(huì)返回一張新的頁(yè)面,傳統(tǒng)的 web 應(yīng)用程序變得運(yùn)行緩慢,且越來(lái)越不友好。
通過(guò)利用 AJAX,您的 JavaScript 會(huì)通過(guò) JavaScript 的 XMLHttpRequest 對(duì)象,直接與服務(wù)器來(lái)通信。
通過(guò)使用 HTTP 請(qǐng)求,web 頁(yè)可向服務(wù)器進(jìn)行請(qǐng)求,并得到來(lái)自服務(wù)器的響應(yīng),而不加載頁(yè)面。用戶可以停留在同一個(gè)頁(yè)面,他或她不會(huì)注意到腳本在后臺(tái)請(qǐng)求過(guò)頁(yè)面,或向服務(wù)器發(fā)送過(guò)數(shù)據(jù)。
----------------------------------------------------------------------------------------------XMLHttpRequest 對(duì)象
通過(guò)使用 XMLHttpRequest 對(duì)象,web 開發(fā)者可以做到在頁(yè)面已加載后從服務(wù)器更新頁(yè)面!
在 2005 年 AJAX 被 Google 推廣開來(lái)(Google Suggest)。
Google 建議使用 XMLHttpRequest 對(duì)象來(lái)創(chuàng)建一種動(dòng)態(tài)性極強(qiáng)的 web 界面:當(dāng)您開始在 Google 的搜索框中輸入查詢時(shí),JavaScript 會(huì)向某個(gè)服務(wù)器發(fā)出這些字詞,然后服務(wù)器會(huì)返回一系列的搜索建議。
----------------------------------------------------------------------------------------------
您的第一個(gè) AJAX 應(yīng)用程序
AJAX - 瀏覽器支持
AJAX 的要點(diǎn)是 XMLHttpRequest 對(duì)象。
不同的瀏覽器創(chuàng)建 XMLHttpRequest 對(duì)象的方法是有差異的。
IE 瀏覽器使用 ActiveXObject,而其他的瀏覽器使用名為 XMLHttpRequest 的 JavaScript 內(nèi)建對(duì)象。
2 <body>
3
4 <script type="text/javascript">
5
6 function ajaxFunction()
7 {
8 var xmlHttp;
9
10 try
11 {
12 // Firefox, Opera 8.0+, Safari
13 xmlHttp=new XMLHttpRequest();
14 }
15 catch (e)
16 {
17
18 // Internet Explorer
19 try
20 {
21 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
22 }
23 catch (e)
24 {
25
26 try
27 {
28 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
29 }
30 catch (e)
31 {
32 alert("您的瀏覽器不支持AJAX!");
33 return false;
34 }
35 }
36 }
37 }
38 </script>
39
40 <form name="myForm">
41 用戶: <input type="text" name="username" />
42 時(shí)間: <input type="text" name="time" />
43 </form></body>
44 </html>
45
例子解釋:
首先聲明一個(gè)保存 XMLHttpRequest 對(duì)象的 xmlHttp 變量。
然后使用 XMLHttp=new XMLHttpRequest() 來(lái)創(chuàng)建此對(duì)象。這條語(yǔ)句針對(duì) Firefox、Opera 以及 Safari 瀏覽器。假如失敗,則嘗試針對(duì) Internet Explorer 6.0+ 的 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"),假如也不成功,則嘗試針對(duì) Internet Explorer 5.5+ 的 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP")。
假如這三種方法都不起作用,那么這個(gè)用戶所使用的瀏覽器已經(jīng)太過(guò)時(shí)了,他或她會(huì)看到一個(gè)聲明此瀏覽器不支持 AJAX 的提示。
----------------------------------------------------------------------------------------------
XMLHttpRequest 對(duì)象的三個(gè)重要的屬性
onreadystatechange 屬性
onreadystatechange 屬性存有處理服務(wù)器響應(yīng)的函數(shù)。下面的代碼定義一個(gè)空的函數(shù),可同時(shí)對(duì) onreadystatechange 屬性進(jìn)行設(shè)置:
2 //我們需要在這里寫一些代碼
3 }
4
readyState 屬性
readyState 屬性存有服務(wù)器響應(yīng)的狀態(tài)信息。每當(dāng) readyState 改變時(shí),onreadystatechange 函數(shù)就會(huì)被執(zhí)行。
這是 readyState 屬性可能的值:
0 請(qǐng)求未初始化(在調(diào)用open()之前)
1 請(qǐng)求已提出(調(diào)用send()之前)
2 請(qǐng)求已發(fā)送(這里通常可以從響應(yīng)得到內(nèi)容頭部)
3 請(qǐng)求處理中(響應(yīng)中通常有部分?jǐn)?shù)據(jù)可用,但是服務(wù)器還沒有完成響應(yīng))
4 請(qǐng)求已完成(可以訪問(wèn)服務(wù)器響應(yīng)并使用它)
我們要向這個(gè) onreadystatechange 函數(shù)添加一條 If 語(yǔ)句,來(lái)測(cè)試我們的響應(yīng)是否已完成(意味著可獲得數(shù)據(jù)):
2 if (xmlHttp.readyState == 4){
3 //從服務(wù)器的response獲得數(shù)據(jù)
4 }
5 }
6
responseText 屬性
可以通過(guò) responseText 屬性來(lái)取回由服務(wù)器返回的數(shù)據(jù)。
----------------------------------------------------------------------------------------------
向服務(wù)器發(fā)送一個(gè)請(qǐng)求
要想把請(qǐng)求發(fā)送到服務(wù)器,我們就需要使用 open() 方法和 send() 方法。
open() 方法需要三個(gè)參數(shù)。第一個(gè)參數(shù)定義發(fā)送請(qǐng)求所使用的方法(GET 還是 POST)。第二個(gè)參數(shù)規(guī)定服務(wù)器端腳本的 URL。第三個(gè)方法規(guī)定應(yīng)當(dāng)對(duì)請(qǐng)求進(jìn)行異步地處理。
send() 方法可將請(qǐng)求送往服務(wù)器。如果我們假設(shè) HTML 文件和 ASP 文件位于相同的目錄,那么代碼是這樣的:
xmlHttp.open("GET","time.jsp",true);
xmlHttp.send(null);
2 <body>
3
4 <script type="text/javascript">
5
6 function ajaxFunction()
7 {
8 var xmlHttp;
9
10 try
11 {
12 // Firefox, Opera 8.0+, Safari
13 xmlHttp=new XMLHttpRequest();
14 }
15 catch (e)
16 {
17
18 // Internet Explorer
19 try
20 {
21 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
22 }
23 catch (e)
24 {
25
26 try
27 {
28 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
29 }
30 catch (e)
31 {
32 alert("您的瀏覽器不支持AJAX!");
33 return false;
34 }
35 }
36 }
37
38 xmlHttp.onreadystatechange=function()
39 {
40 if(xmlHttp.readyState==4)
41 {
42 document.myForm.time.value=xmlHttp.responseText;
43 }
44 }
45 xmlHttp.open("GET","time.asp",true);
46 xmlHttp.send(null);
47
48 }
49 </script>
50
51 <form name="myForm">
52 用戶: <input type="text" name="username" onkeyup="ajaxFunction();" />
53 時(shí)間: <input type="text" name="time" />
54 </form>
55
56 </body>
57 </html>
58
----------------------------------------------------------------------------------------------
AJAX - 服務(wù)器端的腳本
現(xiàn)在,我們要?jiǎng)?chuàng)建可顯示當(dāng)前服務(wù)器時(shí)間的腳本。
responseText 屬性會(huì)存儲(chǔ)從服務(wù)器返回的數(shù)據(jù)。在這里,我們希望傳回當(dāng)前的時(shí)間。這是 "time.asp" 的代碼:
2 response.expires=-1
3 response.write(time)
4 %>
5
注釋:Expires 屬性可設(shè)置在頁(yè)面緩存失效前頁(yè)面被緩存的時(shí)間(分鐘)。Response.Expires=-1 指示頁(yè)面不會(huì)被緩存。
posted on 2009-07-28 15:54 彭偉 閱讀(210) 評(píng)論(0) 編輯 收藏 所屬分類: Good_Study