AJAX核心--XMLHttpRequest五步法

來源:互聯網
上載者:User

標籤:xmlhttprequest   ajax   

引言:


AJAX=非同步Javascript + XML,AJAX是一種用於建立快速動態網頁的技術。


開門見山:


解讀:AJAX使用XHTML和CSS為網頁表示,DOM動態顯示和互動,XML進行資料交換和處理,XMLHttpRequest進行資料檢索,Javascript將以上技術融合。


AJAX與傳統的Web開發有什麼區別?


用一句話總結:在頁面跳轉時,傳統是整個頁面重新整理的;AJAX是一部分資料改變。


思維方式的轉變:傳統web應用時頁面互動為主導、同步響應、非標準方式布局和開發、主要代碼在伺服器端,AJAX是資料互動為主導的、非同步響應、有標準布局、頁面段需要更多地代碼。


AJAX的核心知識點(一):XMLHttpRequest對象


總結XMLHttpRequest五步使用法:

1、建立XMLHttpRequest對象

2、註冊回呼函數

3、使用open方法設定和服務端互動的基本資料

4、設定發送的資料,開始和伺服器端互動

5、在回呼函數中判斷互動是否結束,響應是否正確,並根據需要擷取伺服器端返回的資料,更新頁面。


/*  * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. *///使用封裝方法的人,只關心提供http的要求方法,url地址,成功和失敗的方法//類的構造定義,主要職責就是建立出XMLRequest對象var MyXMLHttpRequest = function(){    //定義的不同瀏覽器的封裝    var xmlhttprequest;    if(window.XMLHttpRequest){        xmlhttprequest = new XMLHttpRequest();        if(xmlhttprequest.overrideMimeType){            xmlhttprequest.overrideMimeType("text/xml");        }    }else if (window.ActiveXObject){        var activeName = ["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];        for(var i = 0; i < activeName.length;i++){            try{                xmlhttprequest = new ActiveXObject(activeName[i]);                break;            }catch(e){                        }        }    }  if(xmlhttprequest === undefined || xmlhttprequest === null){      alert("XMLHttpRequest對象建立失敗!!");  }else {      this.xmlhttp = xmlhttprequest;  } };//使用者發送請求的方法MyXMLHttpRequest.prototype.send = function(method,url,data,callback,failback) {    if(this.xmlhttp !== undefined && this.xmlhttp !== null){        method = method.toUpperCase();        if(method !== "GET" && method !=="POST"){            alert("HTTP的要求方法必須是GET或POST!!");            return;        }        if(url === null || url === underfined){            alert("HTTP的請求地址必須設定!");            return;        }        var tempxmlhttp = this.xmlhttp;        this.xmlhttp.onreadystatechange = function(){               //請求發生改變的事件觸發程序               if(tempxmlhttp.readyState === 4){                    //4=完成,響應資料接收完成                    if(tempxmlhttp.status === 200){                    var responseText = tempxmlhttp.responseText;                    //伺服器相應的常值內容                    var responseXML = tempxmlhttp.responseXML;                    //伺服器相應的XNL內容對應的DOM對象                        if(callback === undefined || callback === null){                        alert("沒有設定處理資料正確返回的方法!");                        alert("返回的資料:" + responseText);                    }else{                        callback(responseText,responseXML);                    }                }else{                    if(failback === undefined || failback === null){                        alert("沒有設定處理資料返回失敗的處理方法!");                        alert("HTTP的響應碼:" + tempxmlhttp.status + ",響應碼的檔案資訊:" +                                 temphttp.status);                    }else{                        failback(tempxmlhttp.status,tempxmlhttp.statusText);                    }                }            }        };        //解決緩衝的轉換        if(url.indexOf("?") >= 0){            url = url + "&t" + (new Date()).valueOf();        }else{            url = url + "?" + (new Date()).valueOf();        }        //解決跨域問題        if(url.indexOf("http://") >= 0){            url.replace("?","&");            url = "Proxy?url=" + url;        }                this.xmlhttp.open(method,url,true);                //如果是POST方式,需要佈建要求頭        if(method === "POST"){            this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");                   }                this.xmlhttp.send(data);    }else{        alert("XMLHttpRequest對象建立失敗,無法發送資料!");    }};MyXMLHttpRequest.prototype.abort = function(){    this.xmlhttp.abort();};



分析代碼:

代碼大體上是說:首先對XMLHttpRequest對象的建構函式定義,其中就是對不同瀏覽器的封裝;之後是定義了一個send方法,這個方法有幾個參數:method有兩個數“GET”和“POST”,url表示請求的伺服器的地址,data是向伺服器返回的資料;之後是註冊回調方法onreadystaechange,readstate有5個值,我們只關心值為4的時候,即相應資料接收成功;之後解決了一些小問題:跨域和Post緩衝問題用url轉換;最後封裝了放棄使用request對象的方法,使用的時候,可以調用內部寫的自己的方法。


callback和fallback實在javascript中寫的。


總結:


AJAX會在之後會有更好的東西替代它,它只是我們學習的一個階段。一種新的事物,我們現在看可能是新的,比較傳統的東西,會有它的不同點,一般人看到的可能更多地是它不同的地方,往往會忽略它與傳統的共同點,我們換一種思維方式,就會發現,我們掌握了傳統的基礎之後,新的事物的不同的地方很容易掌握。


AJAX核心--XMLHttpRequest五步法

相關文章

聯繫我們

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