概念:源自百度百科 — — AJAX(Asynchronous Javascript And XML)php
簡單歸納一下:web
API:XMLHttpRequest接口文檔ajax
主要屬性和方法編程
①建立對象json
var xhr //此時xhr至關於客戶端與服務器之間的中間人 if(window.XMLHttpRequest) //IE6.0 和 IE5.5中,window沒有XMLHttpRequest屬性 { xhr = new XMLHttpRequest(); } else if(window.ActiveXObject) //IE6.0 和 IE5.5中,用此方法建立 { xhr = new ActiveXObject('Microsoft.XMLHTTP'); }
②向服務器發送請求服務器
通常客戶端向服務器發送請求爲GET和POST兩種,,在XMLHttpRequest對象中,經過如下方法實現:app
xhr.open(method, url, async) ----------------------------- //method:有GET、POST等HTTP請求方法 //url:向服務器請求資源的url //async:是否異步請求。true爲異步、false爲同步
------------GET---------------- //將參數配置到url中 xhr.open('GET', 'Http://www.jaykoo.com/index.php?foo=bar&lorem=ipsum', true) xhr.send() ------------POST---------------- xhr.open('POST', 'Http://www.jaykoo.com/index.php', true) xhr.setRequestHeader("Content-type","application/json; charset=utf-8") //將參數放置在HTTP內容中進行POST請求 //send(body),通常要把傳送的數據放在body中 xhr.send('foo=bar&lorem=ipsum')
看完上面的 send() 操做,有如下兩個疑問(待解決):異步
③請求狀態的變化以及響應事件async
AJAX請求分爲幾個階段,在XMLHTTPRequest中經過readystate屬性來指定不一樣的階段狀態。當狀態改變時會經過onreadystatechange屬性來調用回調函數,對不一樣階段狀態的改變做出響應操做。編程語言
readystate
狀態值 | 描述 |
0 | XMLHttpRequest 代理已被建立, 但還沒有調用 open() 方法。 |
1 | open() 方法已經被觸發。在這個狀態中,能夠經過 setRequestHeader() 方法來設置請求的頭部, 能夠調用 send() 方法來發起請求。 |
2 | send() 方法已經被調用,響應頭也已經被接收。 |
3 | 響應體部分正在被接收。若是 responseType 屬性是「text」或空字符串, responseText 將會在載入的過程當中擁有部分響應數據。 |
4 | 請求操做已經完成。這意味着數據傳輸已經完全完成或失敗。 |
onreadystatechange
看屬性名就可知道,當readystate屬性狀態值變化時,xhr立刻回調用onreadystatechange定義的回調函數。
(readystatechange實際上是xhr的註冊事件,onreadystatechange實際上是對事件的響應)
xhr.onreadystatechange = function(){ if(xhr. readystate = 4){ /* do something */ } }
經過readystate狀態值,能夠對XMLHttpRequest的請求響應狀態進行判斷。但卻沒法判斷服務器返回的響應報文中,HTTP的狀態碼(例如常見的,200成功,403服務器拒絕請求,404頁面資源沒法找到等)。這裏XMLHttpRequest對象中用status屬性來獲得響應狀態碼的值。
status
返回了XMLHttpRequest響應中的數字狀態碼。status對應在服務器響應報文中標準的HTTP響應碼。若在響應前或是XMLHttpRequest出錯時,status的值爲0