一,Ajax到底是個什麼東西javascript
用來描述一組技術,它使瀏覽器能夠爲用戶提供更爲天然的瀏覽體驗。java
簡單一句話 不刷新頁面與服務器通信的技術程序員
在Ajax以前,Web站點強制用戶進入提交/等待/從新顯示範例,用戶的動做老是與服務器的「思考時間」同步。數據庫
Ajax提供與服務器異步通訊的能力,從而使用戶從請求/響應的循環中解脫出來。藉助於Ajax,能夠在用戶單擊按鈕時,使用JavaScript DHTML當即更新UI,並向服務器發出異步請求,以執行更新或查詢數據庫。當請求返回時,就可使用JavaScript和CSS來相應地更新UI,而不是刷新整個頁面。瀏覽器
最重要的是,用戶甚至不知道瀏覽器正在與服務器通訊:Web站點看起來是即時響應的。緩存
AJAX目前最經典案例:谷歌地圖服務器
二,Ajax的工做原理網絡
Ajax的核心是JavaScript對象XmlHttpRequest。app
它是一種支持異步請求的技術。簡而言之,XmlHttpRequest使您可使用JavaScript向服務器提出請求並處理響應,而不阻塞用戶。框架
AJAX採用異步交互過程。AJAX在用戶與服務器之間引入一箇中間媒介,從而消除了網絡交互過程當中的處理—等待—處理—等待缺點。用戶的瀏覽器在執行任務時即裝載了AJAX引擎。AJAX引擎用JavaScript語言編寫,一般藏在一個隱藏的框架中。它負責編譯用戶界面及與服務器之間的交互。AJAX引擎容許用戶與應用軟件之間的交互過程異步進行,獨立於用戶與網絡服務器間的交流。如今,能夠用Javascript調用AJAX引擎來代替產生一個HTTP的用戶動做,內存中的數據編輯、頁面導航、數據校驗這些不須要從新載入整個頁面的需求能夠交給AJAX來執行。
使用AJAX,能夠爲JSP、開發人員、終端用戶帶來可見的便捷:
AJAX包含的技術
AJAX:(Asynchronous JavaScript and XML)並非一項新技術,實際上是多種技術的綜合,包括Javascript、XHTML和CSS、DOM、XML和XMLHttpRequest.
服務器端語言:服務器須要具有向瀏覽器發送特定信息的能力。Ajax與服務器端語言無關。
XML (eXtensible Markup Language,可擴展標記語言) 是一種描述數據的格式。AJAX 程序須要某種格式化的格式來在服務器和客戶端之間傳遞信息,XML 是其中的一種選擇
XHTML(eXtended Hypertext Markup Language,使用擴展超媒體標記語言)和 CSS(Cascading Style Sheet,級聯樣式單)標準化呈現;
DOM(Document Object Model,文檔對象模型)實現動態顯示和交互;
使用XMLHTTP組件XMLHttpRequest對象進行異步數據讀取
使用JavaScript綁定和處理全部數據
三,XMLHttpRequest對象細節分析:
<script language=」javascript」>
var http_request = false;
//IE瀏覽器
http_request = new
ActiveXObject("Msxml2.XMLHTTP");
http_request = new
ActiveXObject("Microsoft.XMLHTTP");
//Mozilla瀏覽器
http_request = new XMLHttpRequest();
</script>
XMLHttpRequest對象方法列舉
abort() 中止當前請求
getAllResponseHeaders() 把http請求的全部響應首部做爲鍵/值對返回
getResponseHeader("headerLabel") 返回指定首部的串值
open(「method」,」url」) 創建對服務器的調用,method參數能夠是GET,POST或PUT。url參數能夠是相對URL或絕對URL。這個方法還包括3個可選參數。
send(content) 向服務器發送請求
setRequestHeader("label", "value") 把指定首部設置爲所提供的值。在設置任何首部以前必須先調用open()
onreadystatechange:
該事件處理函數由服務器觸發,而不是用戶
在 Ajax 執行過程當中,服務器會通知客戶端當前的通訊狀態。這依靠更新 XMLHttpRequest 對象的 readyState 來實現。改變 readyState 屬性是服務器對客戶端鏈接操做的一種方式。每次 readyState 屬性的改變都會觸發 readystatechange事件
open(method, url, asynch)
XMLHttpRequest 對象的 open 方法容許程序員用一個Ajax調用向服務器發送請求。
method:請求類型,相似 「GET」或」POST」的字符串。若只想從服務器檢索一個文件,而不須要發送任何數據,使用GET(能夠在GET請求裏經過附加在URL上的查詢字符串來發送數據,不過數據大小限制爲2000個字符)。若須要向服務器發送數據,用POST。
在某些狀況下,有些瀏覽器會把多個XMLHttpRequest請求的結果緩存在同一個URL。若是對每一個請求的響應不一樣,這就會帶來很差的結果。把當前時間戳追加到URL的最後,就能確保URL的唯一性,從而避免瀏覽器緩存結果。
url:路徑字符串,指向你所請求的服務器上的那個文件。能夠是絕對路徑或相對路徑。
asynch:表示請求是否要異步傳輸,默認值爲true(異步)。指定true,在讀取後面的腳本以前,不須要等待服務器的相應。指定false,當腳本處理過程通過這點時,會停下來,一直等到Ajax請求執行完畢再繼續執行。
send(data):
open 方法定義了 Ajax 請求的一些細節。send 方法可爲已經待命的請求發送指令
data:將要傳遞給服務器的字符串。
若選用的是 GET 請求,則不會發送任何數據, 給 send 方法傳遞 null 便可:request.send(null);
當向send()方法提供參數時,要確保open()中指定的方法是POST,若是沒有數據做爲請求體的一部分發送,則使用null.
setRequestHeader(header,value)
當瀏覽器向服務器請求頁面時,它會伴隨這個請求發送一組首部信息。這些首部信息是一系列描述請求的元數據(metadata)。首部信息用來聲明一個請求是 GET 仍是 POST。
Ajax 請求中,發送首部信息的工做能夠由 setRequestHeader完成
參數header: 首部的名字; 參數value:首部的值。
若是用 POST 請求向服務器發送數據,須要將 「Content-type」 的首部設置爲 「application/x-www-form-urlencoded」.它會告知服務器正在發送數據,而且數據已經符合URL編碼了。
該方法必須在open()以後才能調用