Ajax是什麼東東,想必大家想不知道都難,所以這裡不再廢話了。
但是這裡還要重複一下,xmlHttp的來曆,儘管本人不太喜歡微軟,但是好像微軟還是出了很多好玩的東東,包括這裡的主角--xmlHttp。
我的理解是,xmlHttp是一個類用來支援Javascript向服務端發送訊息。最先是微軟在Internet Explorer中以ActiveX的方式來引用這個一個類,被叫做了XmlHttp。這樣一個帶來很酷玩法的傢伙誕生了。接下來,大家都覺得這個東東不錯,於是乎,Mozzila,safari...都提供了這樣一個類,差不多都叫XMLHttpRequest吧???它們都提供一種的方法和屬性,於是乎Ajax就差不多該出來了!
因為,各家瀏覽器和微軟提供的方式不一樣,所以要使用xmlHttp的話,就要做點小動作了:CreatXmlHttp
1 var createXmlHttp = function()
2 {
3 var xmlHttp;
4 try
5 {
6 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
7 }
8 catch(e)
9 {
10 try
11 {
12 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
13 }
14 catch(ex){}
15 }
16 if(!xmlHttp)
17 {
18 try
19 {
20 xmlHttp = new XMLHttpRequest();
21 }
22 catch(ee)
23 {
24 alert("NND,Your browse doesn't support XMLHTTP,Change It!");
25 }
26 }
27 return xmlHttp;
28 }
這是我見過並改進後個人覺得最全面的方法,至於“Msxml2.XMLHTTP”和“Microsoft.XMLHTTP”這兩個東東到底有什麼差別,我也沒查過,你可google 或baidu一下,回頭告我,反正我是懶得查了(這幾天.net封裝Word的控制項都快把我折騰瘋了,NND,微軟出哪麼多版本哎)。
OK,現在xmlHttp建立好了,然後就可以調用Open方法對它進行初始化:1 xmlDom = CreateXmlHttp();
2 /*下面是Open原型:
3 /xmlDom.Open(http-method,url,async,userID,password ));*/
很明顯Open方法中包含了5個參數,前三個是必要的,後兩個是可選的(在伺服器需要進行身分識別驗證時提供)。參數的含義如下所示:
http-method:HTTP的通訊方式,比如GET或是POST;這裡順便說說兩者的區別:
1、get是把參數資料隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一 一對應,在URL中可以看到。post是通過HTTP
post機制,將表單內各個欄位與其內容放 置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。使用者看不到這個過程。
2、 對於get方式,伺服器端用Request.QueryString擷取變數的值,對於post方式,伺服器端 用Request.Form擷取提交的資料。兩種方式的參數都可以用Request來獲得。
3、get傳送的資料量較小,不能大於2KB。post傳送的資料量較大,一般被預設為不受限制。 但理論上,IIS4中最大量為80KB,IIS5中為100KB。
4、get安全性非常低,post安全性較高。
如果用xmlHttp方式提交的話,好像get和post的第1、2條根本沒有區別吧哈哈:)
url:接收XML資料的伺服器的URL地址。通常在URL中要指明ASP或CGI程式(當然也可以是aspx了)
async:一個布爾標識,說明請求是否為非同步。如果是非同步通訊方式(true),客戶機就不等待伺服器的響應;如果是同步方式(false),客戶機就要等到伺服器返回訊息後才去執行其他動作
userID:使用者ID,用於伺服器身分識別驗證
password:使用者密碼,用於伺服器身分識別驗證
嗯,現在已經提交了,然後就該調用Send方法發送XML資料:1 xmlDom.send(var obj); //obj可以是字串、DOM樹或任意資料流.
發送資料的方式分為同步和非同步兩種。在非同步方式下,資料包一旦發送完畢,就結束Send進程,客戶機執行其他的操作;而在同步方式下,客戶機要等到伺服器返回確認訊息後才結束Send進程。
這裡重點要說的是XMLHTTP對象中的readyState屬性,其能夠反映出伺服器在處理請求時的進展狀況。客戶機的程式可以根據這個狀態資訊設定相應的事件處理方法。屬性值及其含義如下表所示:值 說明
0 Response對象已經建立,但XML文檔上傳過程尚未結束(請求沒有發出(在調用open()之前))
1 XML文檔已經裝載完畢(請求已建立但還沒有發出(調用send()之前))
2 XML文檔已經裝載完畢,正在處理中(請求已發出正在處理之中
)
3 部分XML文檔已經解析(請求已經處理, 通常有部分資料可用, 但伺服器還沒有完成響應)
4 文檔已經解析完畢,用戶端可以接受返回訊息(響應已完成, 可以訪問伺服器響應並使用資料)
客戶機處理響應資訊,客戶機接收到返回訊息後,進行簡單的處理,基本上就完成了C/S之間的一個互動周期。客戶機接收響應是通過XMLHTTP對象的屬性實現的:
responseText:將返回訊息作為文本字串;
responseBody:將返回訊息作為HTML文檔內容;
responseXML:將返回訊息視為XML文檔,在伺服器響應訊息中含有XML資料時使用;
responseStream:將返回訊息視為Stream對象
別附:
XmlHttp的status屬性: 200:表示一切順利 404:表示找不到頁面
網上有個哥們說,在本地測試的話不管是正常還是找不到頁面都會返回0這個值,但我沒有碰到過,寫在這裡或許能幫你一把呵呵