Ajax的技術原理

來源:互聯網
上載者:User

標籤:ajax

昨天問道ajax是。我回答到不就是jquery架構提供的一個非同步通訊方法麼。當再問原理時我傻逼了。ajax技術其實我只在實習時用到了。感到很方便的東西它不需要每次更新都重新整理頁面。可以非同步請求伺服器。利用回呼函數進行處理常式。

在jquery API文檔中我們可以看到一個簡單的demo

$.ajax({   type: "POST",   url: "some.php",   data: "name=John&location=Boston",   success: function(msg){     alert( "Data Saved: " + msg );   }});

可以看到這個代碼的意思大概是利用post請求some.php這個方法。傳入參數是用 name=John&location=Boston這麼寫的。data參數也能用{foo:["bar1", "bar2"]}這樣的表現形式。但在發送時會自動轉換成前面的樣子。

那麼這樣一個ajax請求用js怎麼做到的呢?

這裡時利用了XMLHttpRequest對象進行實現的。但不同的瀏覽器擷取這個對象和該對象的方法不同。


可以看到這裡有open方法啊、send方法啊。還有個onreadystatechange這個屬性。這個屬性其實就是讓你設定回呼函數的。你可以寫匿名函數也可以寫函數名。如果要向伺服器發參數可以用setRequestHeader方法設定key value。回呼函數中我們也能擷取到狀態代碼、資訊等等。例如success的狀態代碼是200.重新導向是302.失敗是404之類的。利用這些東西我們就能寫一個簡單的實現。

function CreateXmlHttp() {    //非IE瀏覽器建立XmlHttpRequest對象    if (window.XmlHttpRequest) {        xmlhttp = new XmlHttpRequest();    }    //IE瀏覽器建立XmlHttpRequest對象    if (window.ActiveXObject) {        try {            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");        }        catch (e) {            try {                xmlhttp = new ActiveXObject("msxml2.XMLHTTP");            }            catch (ex) { }        }    }}function Ustbwuyi() {    var data = document.getElementById("username").value;    CreateXmlHttp();    if (!xmlhttp) {        alert("建立xmlhttp對象異常!");        return false;    }    xmlhttp.open("POST", url, false);    xmlhttp.onreadystatechange = function () {        if (xmlhttp.readyState == 4) {            document.getElementById("user1").innerHTML = "資料正在載入...";            if (xmlhttp.status == 200) {                document.write(xmlhttp.responseText);            }        }    }    xmlhttp.send();}

這裡引用的是網上的代碼。我們簡單分析一下。首先我們擷取到了XMLHttpRequest對象。這裡判斷了一下是什麼瀏覽器。用了幾個if else。然後我們佈建要求方式、url、傳輸方式。false是同步、true是非同步。然後我們寫了個回呼函數。告訴這個回呼函數。我們只有在互動完成狀態為4時候才做以下代碼。這裡面我們又判斷了一下返回狀態代碼。說只有success時候我們才執行以下代碼。這裡貌似忘記用xmlhttp.setRequestHander("username",data);佈建要求時候的key-value了。

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.