js中ajax的認識運用與封裝__js

來源:互聯網
上載者:User
1.認識ajax(ajax的操作必須在伺服器上運行,並且不能跨域,只能訪問同網域名稱下的其他檔案) ajax基本格式 ↓↓
 <script>    //ajax基本格式        var xhr = new XMLHttpRequest();        xhr.open('get' , '01-test.txt' , true);        xhr.send();        xhr.onreadystatechange = function () {            if (xhr.readyState == 4){                alert( xhr.responseText );            };        };    /*註解    1. var xhr = new XMLHttpRequest();        建立一個ajax對象,ajax的實現都是要通過這個對象    2. xhr.open(); 準備發送請求        三個參數:            第一個:通過什麼方式                'get'                'post'            第二個:訪問誰                url路徑            第三個:是否非同步                true                false     3. xhr.send(); 發送請求        get方式時不需要參數     4.xhr.onreadystatechange = function () {         if (xhr.readyState == 4){             執行函數         };       };         .onreadystatechange 當readystate發生改變的時候觸發         .readyState 狀態代碼            0 :請求還沒有建立(open執行之前);            1 :請求建立了,但是還沒有發送(open剛執行);            2 :請求正式發送了(send執行了);            3 :請求已經受理,有一部分資料已經可用,但是還沒有完全處理完;            4 :請求完全處理完成。         .responseText 請求的頁面返回的字串資料     */</script>
form表單中get和post方法的區別↓↓ 1.get
<form action="get.php" method="get">    <input type="text" placeholder="請輸入您的使用者名稱" name="user"> <br>    <input type="text" placeholder="請輸入您的密碼" name="pwd"><br>    <input type="submit"></form>

使用get方法進行表單提交,提交的資訊會在url連結中顯示出來,並且頁面變成了一個新的頁面。 2.post

<form action="post.php" method="post">    <input type="text" placeholder="請輸入您的使用者名稱" name="user"> <br>    <input type="text" placeholder="請輸入您的密碼" name="pwd"><br>    <input type="submit"></form>

使用post方法,雖然提交的資訊沒有在url中顯示出來,但依然跳到了新的頁面。 而在平時,有的頁面中,我們要實現的效果是在不重新整理頁面不跳轉頁面的情況下進行頁面中某一塊資訊的更新,這就要用到ajax。 2.ajax中get和post方法的寫法以及運用 1.get ↓↓

var xhr = new XMLHttpRequest();xhr.open('get' , 'get.php?user=afei&pwd=789' , true);    //使用get方法時,需要把要傳的資料以user=afei&pwd=789的方式寫在url?後面xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');xhr.send();                    //get方法時,send()可以不填參數xhr.onreadystatechange = function () {    if (xhr.readyState == 4){        alert( xhr.responseText );    };};
2.post ↓↓
 var xhr = new XMLHttpRequest();xhr.open('post' , 'post.php' , true);           //post方法url後面不需要寫資料xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');xhr.send('user=afei&pwd=456');                 //post方法把要傳的資料寫在send()中xhr.onreadystatechange = function () {    if (xhr.readyState == 4){        alert( xhr.responseText );    }};
3.ajax運用(擷取數組、json資料) ↓↓
setInterval(function () {    var xhr = new XMLHttpRequest();    xhr.open('get' , 'data.txt' , true);       //data.txt是我提前寫好的json檔案,裡面放著要擷取的資料    xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');    xhr.send();    xhr.onreadystatechange = function () {        if (xhr.readyState == 4){            var data = eval( xhr.responseText );     //eval在這裡會把擷取到的json當做是js代碼來讀轉成數組            var oUl =document.querySelector('#box ul');  //將擷取的數組追加到新增的ul,li中            oUl.innerHTML = '';            for (var i=0; i<data.length; i++){                var oLi = document.createElement('li');                oLi.innerHTML = '姓名:'+ data[i].name +',年齡:' + data[i].age;                oUl.appendChild(oLi);            }        }    };},3000)
data.txt內容 ↓↓
[{    "name" : "第一個",    "age" : "20"},{    "name" : "第二個",    "age" : "20"},{    "name" : "第三個",    "age" : "19"},{     "name" : "第四個",     "age" : "24"},{    "name" : "第五個",    "age" : "22"},{    "name" : "第六個",    "age" : "21"}]
效果圖(不重新整理頁面的情況下,每三秒更新一次) ↓↓

上面提到eval()方法,他會把傳給他的所有參數都當成js代碼來讀,包括非json部分,這樣不安全,可能會把不需要的內容轉成全域變數,對我們的代碼會有影響。 同樣的還有一個方法,JSON.parse(),如果傳入的不是json就不會轉,並且傳入的json中,屬性和值都必須用‘’‘’雙引號。 這兩種方法均相容IE9及以上,要相容IE9以下,需下載json2.js進行引用。 3.ajax的封裝

<script>     /*      xhr.status   http狀態代碼     */     ajax({         url : 'get.php',         data : 'user=heihei&pwd=111',         success : function ( msg ) {             alert( msg );         },         error : function (std) {             alert('訪問出錯,錯誤碼:' + std);         }     });/*    ajax函數接受一個json參數,該json可以有一下屬性:        type : string 選填,發送請求的方式,預設'get',        url : string 必填,訪問的檔案路徑,        aysn : boolean 選填,是否非同步,預設true,        data : string/json,選填,需要發送的資料,        success : function 選填,請求成功後的回呼函數,第一個形參代表返回的資料,        error : function 選填,請求失敗後的回呼函數,第一個形參代表http狀態代碼。 */function ajax(mJson) {    var type = mJson.type || 'GET';    var url = mJson.url;    var aysn = mJson.aysn || true;    var data = mJson.data;    var success = mJson.success;    var error = mJson.error;    if ( typeof data === 'object' ){        var str = '';        for (var key in data){str += key + '=' + data[key] + '&'};        data = str + '_=' + new Date().getTime();    }else if (typeof data === 'string'){        data += '&_=' + new Date().getTime();    }    if (data && /^get$/i.test(type))url += '?' + data;    var xhr = new XMLHttpRequest();    xhr.open(type , url , aysn);    xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');    xhr.send(data);    xhr.onreadystatechange = function () {        if (xhr.readyState === 4){            if (xhr.status >= 200 && xhr.status < 300){                success && success( xhr.responseText );            }else{                error && error( xhr.status );            }        }    }}</script>

以上就完成了ajax的封裝,以後要用的話,可以直接引用下面的function,然後用ajax()傳json參數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.