Ajax(20171101)

1.ajax

AJAX = 異步 JavaScript 和 XML。
AJAX 是一種用於創建快速動態網頁的技術。
通過在後臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。
這意味着可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
傳統的網頁(不使用 AJAX)如果需要更新內容,必需重載整個網頁面。

2.創建 XMLHttpRequest 對象

eg:
 var xhr = null;
        if (window.XMLHttpRequest) {
          //所有現代瀏覽器(IE7+、Firefox、Chrome、Safari 以及 Opera)
          //均內建 XMLHttpRequest 對象。
            xhr = new XMLHttpRequest();
        } else {
          //老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對象:
            xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }

3.向服務器發送請求

與 POST 相比,GET 更簡單也更快,並且在大部分情況下都能用。 然而,在以下情況中,請使用 POST 請求: a)無法使用緩存文件(更新服務器上的文件或數據庫) b)向服務器發送大量數據(POST 沒有數據量限制) c)發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠

4.服務器響應

如需獲得來自服務器的響應,請使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性。
屬性  描述
   responseText 獲得字符串形式的響應數據。
  responseXML   獲得 XML 形式的響應數據。

5.onreadystatechange 事件

當請求被髮送到服務器時,我們需要執行一些基於響應的任務。
每當 readyState 改變時,就會觸發 onreadystatechange 事件。
readyState 屬性存有 XMLHttpRequest 的狀態信息。

6.處理服務器返回的數據

將服務器返回的數據渲染到頁面上
案例一-----------------------------------------------------------
(後臺文件爲json格式)


eg:
樣式:
<style>
        .con {
            width: 600px;
            margin: 100px auto;
            padding: 20px;
            border: 1px solid #eee;
        }
        .con table {
            border-bottom: 1px solid #eee;
            font-size: 16px;
            font-weight: 800;
            line-height: 2em;
            text-align: center;
            width: 100%;
        }
        .con table thead{
            text-align: center;
        }
        .con table td{
            border:1px solid #eee ;
            padding: 5px 10px;
        }
        .con table td:nth-of-type(1){
            text-align: right;
        }
        .con table td:nth-of-type(2){
            text-align: left;
        }
    </style>
結構:
<div class="con">
   <table id="information">
       <thead><tr><th colspan="3">北京空氣狀況</th></tr></thead>

   </table>
</div>

ajax:
      //執行函數
    showInfo();
    //封裝函數
    function showInfo() {
        var information = document.getElementById("information");
        var info_tbody = document.createElement("tbody");
        information.appendChild(info_tbody);
        info_tbody.innerHTML = "";
        var xhr = null;
        //兼容處理,創建XMLHttpRequest對象,下圖有轉化後的內容截圖
        if (window.XMLHttpRequest) {
            xhr = new XMLHttpRequest();
        } else {
            xhr = new ActiveXObject('Microsoft.XMLHTTP');
        }
        xhr.open("get","tq.json");
        xhr.onreadystatechange = function () {
            if (xhr.readyState == 4 && xhr.status == 200) {
                //將返回的數據轉化成json格式
                var data =JSON.parse(xhr.responseText);
               for(var i in data.data){
                    if(i=="yesterday"){
                        var trye = document.createElement("tr");
                        var tdye = document.createElement("td");
                        tdye.innerHTML=i;
                        trye.appendChild(tdye);
                        var tdye1 = document.createElement("td");
                        var stri="";
                        for(var s in data.data.yesterday){
                            stri+=data.data.yesterday[s]
                        }
                        tdye1.innerHTML =stri;
                        trye.appendChild(tdye1);
                        info_tbody.appendChild(trye);
                    }else if(i=="forecast"){
                        var trf = document.createElement("tr");
                        var tdf = document.createElement("td");
                        tdf.innerHTML=i;
                        trf.appendChild(tdf);
                        var tdf1 = document.createElement("td");
                        for(var j in data.data.forecast){
                            var pt = document.createElement("p");
                            var str="";
                            for(var m in data.data.forecast[j]){
                                str+=data.data.forecast[j][m]
                            }
                            pt.innerHTML = str;
                            tdf1.appendChild(pt);
                        }
                        trf.appendChild(tdf1);
                        info_tbody.appendChild(trf);
                    }else{
                        var trtag = document.createElement("tr");
                        trtag.innerHTML="<td>"+i+"</td><td>"+data.data[i]+"</td>";
                        info_tbody.appendChild(trtag);
                    }

               }
            }
        };
        xhr.send();
    }

案例二----------------------------------------------------------- (後臺文件爲xml格式) 其他內容一樣只是數據處理稍有差別 showInfo(); function showInfo() { var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } xhr.open('get', 'tq.xml'); xhr.onreadystatechange = function () { if (xhr.readyState == 4 && xhr.status == 200) { var data = xhr.responseXML; // var tbody =document.createElement("tbody"); //讀取XML數據 var resp = data.getElementsByTagName("resp")[0];//不同的地方 var city = resp.getElementsByTagName("city")[0]; var dttag = document.createElement("dt"); dttag.innerHTML = city.textContent;//獲得元素的文本屬性 ....... } }; xhr.send(); }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章