書歸正傳,AJAX其實不是一種語言,甚至不是一種技術,它是幾種技術的有機結合(Javascript、XML、CSS等等,其實有時還會用到更多的技術,比如偶鐘情滴java^_^,就像推War3,要多個兵種加起來用才夠厲害。。。跑題了~~~~)。Javascript作為腳本語言,用Javascript操作XML和CSS,用XML做為數據的存儲介質,用CSS顯示效果和狀態。
這里不得不提的一項內容就是XMLHttpRequest,偶認為這是真正Ajax的核心東東(可能是偶見識太少了- -!),它可以模擬Request對象向服務器提交請求,并返回請求結果,這就摒棄了原有的讓人等的好煩的白白的瀏覽器顯示頁!!用句不怎么術的術語說就是“動態無刷新”。廢話不說,來看看這么強大的DD是怎么實現的~~~
不同的瀏覽器實現的方式不一樣,對于Mozilla, Firefox, Safari,?和Netscape瀏覽器:
var xmlhttp=new XMLHttpRequest()
對于Internet Explorer:
var xmlhttp=CreatActiveObject("Micosoft.XMLHttp")
編程要點:
---------------------------屬性--------------------------------
屬性 |
值類型 |
說明 |
onreadystatechange |
回調函數名稱的字符串 |
指明回調函數 |
readyState |
請求狀態代碼,共四種狀態: 0????未初始化 1????正在裝載 2????裝載完畢 3????交互中 4????完成
|
XMLHttpRequest對象的請求狀態 |
responseText |
返回數據的字符串形式 |
以字符串形式存儲該請求返回的數據 |
responseXML |
返回一個Xml Document對象 |
以XML數據形式存儲請求返回的數據 |
status |
請求所返回的HTTP返回碼: "100" : Continue "101" : witching Protocols "200" : OK "201" : Created "202" : Accepted "203" : Non-Authoritative Information "204" : No Content "205" : Reset Content "206" : Partial Content "300" : Multiple Choices "301" : Moved Permanently "302" : Found "303" : See Other "304" : Not Modified "305" : Use Proxy "307" : Temporary Redirect "400" : Bad Request "401" : Unauthorized "402" : Payment Required "403" : Forbidden "404" : Not Found "405" : Method Not Allowed "406" : Not Acceptable "407" : Proxy Authentication Required "408" : Request Time-out "409" : Conflict "410" : Gone "411" : Length Required "412" : Precondition Failed "413" : Request Entity Too Large "414" : Request-URI Too Large "415" : Unsupported Media Type "416" : Requested range not satisfiable "417" : Expectation Failed "500" : Internal Server Error "501" : Not Implemented "502" : Bad Gateway "503" : Service Unavailable "504" : Gateway Time-out "505" : HTTP Version not supported
其實實際用的時候記著200是OK(本地調試時OK狀態會返回0),404是NO FOUND就可以了! |
該XMLHttpRequest所做的請求返回的HTTP返回碼 |
statusText |
字符串,此屬性只讀,以BSTR返回當前請求的響應行狀態,此屬性僅當數據發送并接收完畢后才可獲取。 |
XMLHttpRequest所做的Http請求返回信息 |
---------------------------方法---------------------------
方法 |
參數 |
返回值 |
說明 |
abort() |
無 |
無 |
取消當前的請求 |
getAllResponseHeaders() |
無 |
以字符串形式返回所有的HTTP頭 |
以字符串形式返回所有的HTTP頭 |
getResponseHeader("headerName") |
headerName參數指定的http頭字符串 |
返回指定的HTTP頭字符串 |
從響應信息中獲取指定的http頭 |
open('method','URL',async,'uname','pswd') |
method字符串指定用何方法發送請求,比如POST、GET、PUT及PROPFIND。大小寫不敏感 URL字符串指定請求的HTTP地址,可以為絕對路徑也可以為相對路徑 async布爾值指定請求是否為異步方式,默認為true。如果為真,當狀態改變時會調用onreadystatechange屬性指定的回調函數。 uname字符串指定用于服務器驗證用戶名,如果服務器需要驗證,此處指定用戶名,如果未指定,當服務器需要驗證時,會彈出驗證窗口。 pswd字符串指定驗證信息中的密碼部分,如果用戶名為空則此部分被忽略。
|
無 |
創建一個新的http請求,并指定此請求的方法、URL以及驗證信息 |
send(content) |
content參數可以是任何想發送到服務器端的數據 |
無 |
發送請求到http服務器并接收回應,此方法的同步或異步方式取決于open方法中的bAsync參數,如果bAsync == False,此方法將會等待請求完成或者超時時才會返回,如果bAsync == True,此方法將立即返回。如果發送的數據為XML DOM object,則回應將被編碼為在xml文檔中聲明的編碼,如果在xml文檔中沒有聲明編碼,則使用默認的UTF-8。 |
setRequestHeader("label","value") |
label字符串指定頭名稱 value字符串指定頭的值 |
|
單獨指定請求的某個http頭,如果已經存在已此名稱命名的http頭,則覆蓋之。此方法必須在open方法后調用。 |