一提到非同步互動大家就會說ajax,彷彿ajax這個技術已經成為了非同步互動的代名詞.那下面將研究ajax的核心對象!
利用ajax實現非同步互動無非4步:
- 建立ajax核心對象
- 與伺服器建立串連
- 向伺服器發送請求
- 接收伺服器響應的資料
看似神秘的非同步互動當明確這4步後,也許在大家腦海裡已經有了初步的思路了
首先我們建立ajax的核心對象,由於瀏覽器的相容問題我們在建立ajax核心對象的時候不得考慮其相容問題,因為要想實現非同步互動的後面步驟都基於第一步是否成功的建立了ajax核心對象.
function getXhr(){ // 聲明XMLHttpRequest對象 var xhr = null; // 根據瀏覽器的不同情況進行建立 if(window.XMLHttpRequest){ // 表示除IE外的其他瀏覽器 xhr = new XMLHttpRequest(); }else{ // 表示IE瀏覽器 xhr = new ActiveXObject('Microsoft.XMLHttp'); } return xhr; } // 建立核心對象 var xhr = getXhr();
通過上述代碼我們已經成功的建立了ajax核心對象,我們儲存在變數xhr中,接下來提到的ajax核心對象都將以xhr代替.
第二步就是與伺服器建立串連,通過ajax核心對象調用open(method,url,async)方法.
open方法的形參解釋:
method表示請求方式(get或post)
url表示請求的php的地址(注意當請求類型為get的時候,請求的資料將以問號跟隨url地址後面,下面的send方法中將傳入null值)
async是個布爾值,表示是否非同步,預設為true.在最新規範中這一項已經不在需要填寫,因為官方認為使用ajax就是為了實現非同步.
xhr.open("get","01.php?user=xianfeng");//這是get方式請求資料xhr.open("post","01.php");//這是以post方式請求資料
第三步我們將向伺服器發送請求,利用ajax核心對象調用send方法
如果是post方式,請求的資料將以name=value形式放在send方法裡發送給伺服器,get方式直接傳入null值
xhr.send("user=xianfeng");//這是以post方式發送請求資料xhr.send(null);//這是以get方式
第四步接收伺服器響應回來的資料,使用onreadystatechange事件監聽伺服器的通訊狀態.通過readyState屬性擷取伺服器端當前通訊狀態.status獲得狀態代碼,利用responseText屬性接收伺服器響應回來的資料(這裡指text類型的字串格式資料).後面再寫XML格式的資料和大名鼎鼎的json格式資料.
xhr.onreadystatechange = function(){ // 保證伺服器端響應的資料發送完畢,保證這次請求必須是成功的 if(xhr.readyState == 4&&xhr.status == 200){ // 接收伺服器端的資料 var data = xhr.responseText; // 測試 console.log(data); } };