ajax的理解與工作流程

來源:互聯網
上載者:User

標籤:資料交換   指派   sed   cti   並且   執行   發送請求   活動   opera   

一、什麼是ajax

ajax是一種非同步通訊技術。在ajax出現之前,用戶端與服務端之間直接通訊。引入ajax之後,用戶端與服務端加了一個第三者--ajax。有了ajax之後,通過在後台與伺服器進行少量資料交換,可以達到在不重新整理整個頁面的情況下實現局部重新整理。其原理

二、XHR對象

ajax技術的核心是XMLHttpRequest對象(簡稱XHR)。IE7+、FireFox、Opera、Chrome和Safari都支援原生的XHR對象,建立XHR對象可以這樣寫

var xhr = new XMLHttpRequest();

那如果要相容IE6、7又該怎麼寫

var xhr = new ActiveXObject("MSXML2,XMLHTTP");

因此相容寫法如下

1 if(window.ActiveXObject) {2     var xhr = new ActiveXObject("MSXML2,XMLHTTP");3 } else {4     var xhr = new XMLHttpRequest();5 }

三、XHR用法

建立完XHR對象後,要調用open()方法建立請求,open()方法接受三個參數:

1.要發送的請求的類型(如"get"、"post"等)

2.請求的URL

3.表示是否非同步發送請求的布爾值(預設為true,表示非同步)

xhr.open("get","index.php",true);

post()要求方法如下面代碼

xhr.open("get","index.php",true);//post()方法必須在send()方法之前加上下面這段代碼xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");

說明一點:URL相對於執行代碼的當前頁面,也可以用絕對路徑

準備工作做好後,調用send()方法發送請求,

xhr.send(null);

這裡get方法傳輸的資料已經放到url中,可以將參數設定為null

在調用send()方法後,請求就會被指派到伺服器,onreadychange捕獲請求的狀態代碼,並進行檢測

onreadychange對象有個readyState屬性,該屬性的值表示當前的活動階段,其值有如下幾個:

0:未初始化。尚未調用open()方法

1:啟動。已經調用open()方法,但尚未調用send()方法

2:發送。已經調用send()方法,但尚未接收到響應

3:接收。已經接受到部分響應資料

4:完成。已經接受到全部響應資料,並且可以在用戶端使用

我們只需判斷readyState的值是否為4就可以知道所有資料已經就緒。

 1 xhr.onreadystatechange = function(){ 2     if (xhr.readyState==4) { 3         //判斷狀態代碼是否成功 4         if (xhr.status>=200&&xhr.status<=207||xhr.status==304) { 5             //調用ajax的responseText屬性返回資料 6             alert(xhr.responseText); 7         }else{ 8             alert(xhr.status); 9     }  10 }      

四、總結

原生ajax的請求總結為一下六個步驟

1.建立XHR對象

2.調用open()方法建立請求

3.調用send()方法發送請求

4.onreadychange捕獲請求的狀態代碼

5.判斷狀態嗎是否成功

6.調用ajax的responseText屬性返回資料

 1 //拼接路徑 2 function toUrl(url, data) { 3     //擷取時間戳記 4     var time = new Date().getTime(); 5     data.time = time; 6     var arr = []; 7     for(var i in data) { 8         var str = i + "=" + data[i]; 9         //["user"=‘lili‘,"pass"="4564522",time="145486456"]10         arr.push(str);11     }12     var str = arr.join("&"); //"user=lili&pass=4564522&time=145486456"13     var path = url + "?" + str;14     return path;15 }16 function fnAjax(obj) {17     var data = obj.data||{};//可選,如果沒有data就建立一個18     var path = toUrl(obj.url,data);19     var sendType = obj.sendType||"get";20     var succFn = obj.succFn||false;21     var failFn = obj.failFn||false;22     //1、建立一個XMLHttpRequest對象23     //相容寫法24     if(window.ActiveXObject) {25         var ajax = new ActiveXObject("MSXML2,XMLHTTP");//相容IE6、726     } else {27         var ajax = new XMLHttpRequest();//現代瀏覽器28     }29     //2、建立一個請求30     var time = new Date().getTime();31     //判斷傳送的類型32     if (sendType=="get") {33         ajax.open("get", path);34         ajax.send(path);35     }else{36         var pathArr = path.split("?");37         ajax.open("post", pathArr[0]);// pathArr[0]?之前的內容38         //url = "test.txt?time=12365478"39         //3、發送請求40         //get方法傳輸的資料已經放到url中,可以將參數設定為null41         ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");42         ajax.send(pathArr[1]);//pathArr[1]?之後的內容43     }44     //4、檢測請求的狀態45     ajax.onreadystatechange = function() {46         //如果ajax對象的準備狀態發生改變執行事件47         //onreadystatechange事件是在readyState屬性發生改變時觸發的,48         //readyState的值表示當前請求的狀態,在事件處理常式中可以根據這個值來進行不同的處理。49         //5、判斷請求的狀態50         if(ajax.readyState == 4) {51             //6、判斷請求結果52             if(ajax.status >= 200 && ajax.status <= 207 || ajax.status == 304) {53                 //7、請求成功拿到返回的結果54                 if (succFn) {55                     succFn(ajax.responseText);56                 }57             } else {58                 if (failFn) {59                     failFn(ajax.status);60                 }                61             }62         }63     }64 }
View Code

 

ajax的理解與工作流程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.