Ajax是Asynchronous JavaScript and XML的縮寫。Asynchronous,是任務的一種執行模式,程序的執行順序與任務的排列順序是不一致的、異步的。JavaScript,是程序的核心,用來進行交互以及通訊的控制與實現。XML,是進行交互以及通訊的數據格式,目前一般採用JSON的格式。html
傳統web應用,每次用戶的交互都須要向服務器發送請求,服務器接收並處理請求以後,返回新的頁面給客戶端瀏覽器,在此期間用戶必須等待頁面從新繪製完成。jquery
使用Ajax,用戶的交互交給JavaScript來處理而不是直接發送給服務器,此時頁面不進行刷新,在此期間用戶能夠繼續進行頁面交互。當服務器將數據返回給JavaScript時,能夠局部更新頁面,從而用戶在頁面沒有提交或刷新就獲得新的數據。web
經過這種異步模式,使web應用程序像桌面應用程序同樣,可以及時響應用戶與服務器之間的交互,沒必要進行頁面刷新或跳轉,縮短等待時間,減輕服務器的負載。ajax
XMLHttpRequest對象是Ajax技術的核心,在IE 5中首次引入,是一種支持異步請求的技術。經過該對象,可使用JavaScript向服務器提出請求並處理響應,而不阻塞用戶的其餘操做。json
使用XMLHttpRequest對象向服務器發送請求和處理響應以前,必須先建立一個XMLHttpRequest對象。在不一樣的瀏覽器中,建立XMLHttpRequest對象的建立方式也不相同,因此須要對瀏覽器進行判斷。跨域
var xhr = new XMLHttpRequest();
或數組
var xhr = new ActiveXObject("Microsoft.XMLHTTP");
後者支持IE 5和IE 6。瀏覽器
從表單獲取數據:緩存
var city = document.getElementById("city").value;
創建要鏈接的URL:安全
var url = "/pages/getCity.html?city=" + escape(city)
打開服務器鏈接:
xhr.open("GET", url, true);
最後一個參數設爲true,表示請求一個異步鏈接;若是設爲false,表示發送請求後將等待服務器返回的響應。
設置鏈接以後服務器要進行的處理:
xhr.onreadystatechange = updatePage;
屬性onreadystatechange告訴服務器處理完請求以後,執行哪些操做。
發送請求:
xhr.send();
判斷響應是否處於就緒狀態:
if (xhr.readyState === 4 && xhr.status === 200)
得到服務器的響應:
var response = xhr.responseText;
設置表單數據:
document.getElementById("zipCode").value = response;
老版本的XMLHttpRequest對象存在不少缺點:
新版本針對老版本的缺點,作出很大改進:
設置最長等待時間,超過這個時限,會自動中止HTTP請求:
xhr.timeout = 3000;
爲了方便表單處理,新增FormData對象,能夠模擬表單:
var formData = new FormData(); formData.append('username', 'sean'); formData.append('age', 20); xhr.send(formData);
要上傳的文件是表單元素,因此能夠將它放到FormData對象中,實現文件上傳:
for (var i=0; i\<files.length; i++) { formData.append('files[]', files[i]); }
利用新增的responseType屬性,指定服務器返回的數據類型,默認是text文本類型。若是設置爲blob,表示服務器返回的是二進制對象。
xhr.responseType = 'blob';
還能夠設置爲arraybuffer,把二進制數據放在一個數組裏:
xhr.responseType = "arraybuffer";
傳送數據時,使用progress事件,返回進度信息。它分上傳和下載兩種狀況:下載屬於XMLHttpRequest對象,上傳屬於XMLHttpRequest.upload對象。
定義progress事件的回調函數:
xhr.onprogress = updateProgress; xhr.upload.onprogress = updateProgress;
在回調函數中,處理事件:
function updateProgress(event) { if (event.lengthComputable) { var percentComplete = event.loaded / event.total; } }
與progress事件相關的其餘事件:
向不一樣域名的服務器發送HTTP請求,叫作跨域資源共享,簡稱CORS。前提是瀏覽器必須支持該功能,而且服務器端必須贊成進行跨域。
xhr.open('GET', 'http://www.google.com/');
能夠遠程載入HTML,並插入到DOM中。經常使用來從服務器上獲取靜態的數據文件。load方法的傳遞方式根據參數data來自動指定。若是沒有參數,則採用GET方式,不然會採用POST方式。
參數說明:
使用GET方式進行異步請求。服務器的狀態和應用的模型數據不受GET操做的影響。
參數說明:
使用POST方式進行異步請求。發送到服務器的數據能夠用來修改應用的模型數據。
get和post方式的區別:
用來加載js文件,js文件會自動執行。
用來加載JSON文件。
是jQuery最底層的實現。參數包含了所須要的請求設置以及回調函數,以key/value形式存在。
選項:
參考資料: