XMLHttpRequest和AJAX知識

AJAX概念

AJAX(Asynchronouse Javascript And Xml),瀏覽器使用JavaScript和服務(wù)器進(jìn)行數(shù)據(jù)交互,是一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新網(wǎng)頁數(shù)據(jù)的技術(shù)。

AJAX步驟
  1. 創(chuàng)建XMLHttpRequest對象 :
var xmlhttp=new XMLHttpRequest();
//  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
xmlhttp=new XMLHttpRequest();
// IE6, IE5 瀏覽器執(zhí)行代碼
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  1. 配置XMLHttpRequest對象
xmlhttp.open("GET","/ajax.xhtml?page=1",true);
  1. 發(fā)送XMLHttpRequest對象
  xmlhttp.send();
AJAX實(shí)例
function loadXMLDoc()
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執(zhí)行代碼
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 瀏覽器執(zhí)行代碼
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            //在這里進(jìn)行獲得數(shù)據(jù)后的處理
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","/ajax.xhtml?page=1",true);
    xmlhttp.send();
}
AJAX服務(wù)器狀態(tài)碼
//readyState
0: 請求未初始化
1: 服務(wù)器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應(yīng)已就緒
//status
200:服務(wù)器響應(yīng)正常。
304:該資源在上次請求之后沒有任何修改(這通常用于瀏覽器的緩存機(jī)制,使用GET請求時尤其需要意)。
400:無法找到請求的資源。
401:訪問資源的權(quán)限不夠。
403:沒有權(quán)限訪問資源。
404:需要訪問的資源不存在。
405:需要訪問的資源被禁止。
407:訪問的資源需要代理身份驗(yàn)證。
414:請求的URL太長。
500:服務(wù)器內(nèi)部錯誤。
XHR2的方法

除了使用readystatechange事件來探測HTTP請求的完成外,在XHR2中,還定義了多個有用的事件。

abort事件:當(dāng)進(jìn)度事件被中止時觸發(fā)。如果發(fā)生錯誤,導(dǎo)致進(jìn)程中止,不會觸發(fā)該事件。
error事件:由于錯誤導(dǎo)致資源無法加載時觸發(fā)。
load事件:進(jìn)度成功結(jié)束時觸發(fā)。
loadstart事件:進(jìn)度開始時觸發(fā)。
loadend事件:進(jìn)度停止時觸發(fā),發(fā)生順序排在error事件\abort事件\load事件后面。
progress事件:當(dāng)操作處于進(jìn)度之中,由傳輸?shù)臄?shù)據(jù)塊不斷觸發(fā)。
timeout事件:進(jìn)度超過限時觸發(fā)。

當(dāng)調(diào)用send()時,觸發(fā)單個loadstart事件。當(dāng)正在加載服務(wù)器的響應(yīng)時,XMLHttpRequest對象會發(fā)現(xiàn)progress事件,通常每隔50毫秒左右,可以使用這些事件給用戶反饋請求的進(jìn)度。當(dāng)事件完成,會觸發(fā)load事件。

HTTP請求無法完成有3種情況:
請求超時,會觸發(fā)timeout事件
請求終止,會觸發(fā)abort事件
請求發(fā)生錯誤,會觸發(fā)error事件
注意:對于任何具體請求,瀏覽器將只會觸發(fā)load、abort、timeout和error事件中的一個。一旦這些事件中的一個發(fā)生后,瀏覽器應(yīng)該觸發(fā) loadend 事件。

//使用事件的兩種方法
xhr.onload=function(){}

xhr.addEventListener('load',function(){})
關(guān)于上傳

在XHR2中,也提供了用于監(jiān)控HTTP請求上傳的事件。在實(shí)現(xiàn)這些特性的瀏覽器中,XMLHttpRequest對象有一個upload屬性,upload屬性值是一個對象,它定義了addEventListener()方法和整個progress事件集合,比如onprogress和onload。

xhr.upload.onprogress = function(e){
  var percentComplete = e.loaded / e.total;
}
參考文獻(xiàn):https://www.kancloud.cn/dennis/tgjavascript/241825 (Ajax部分)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文詳細(xì)介紹了 XMLHttpRequest 相關(guān)知識,涉及內(nèi)容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,999評論 2 18
  • Ajax和XMLHttpRequest 我們通常將Ajax等同于XMLHttpRequest,但細(xì)究起來它們兩個是...
    changxiaonan閱讀 2,398評論 0 2
  • Ajax 模塊也是經(jīng)常會用到的模塊,Ajax 模塊中包含了 jsonp 的現(xiàn)實(shí),和 XMLHttpRequest ...
    對角另一面閱讀 665評論 0 1
  • Ajax:Asynchronous JavaScript + XML的簡寫。Ajax技術(shù)的核心是XMLHttpRe...
    exialym閱讀 921評論 0 8
  • 連續(xù)兩個都里面都有生病我也算服了自己了。僅僅是完成了八次運(yùn)動。運(yùn)動量沒有達(dá)到效果肯定也沒有,身材肯定也不會發(fā)生改變...
    Sicily雪閱讀 239評論 0 0

友情鏈接更多精彩內(nèi)容