xhr

XMLHttpRequest對象(簡稱XHR)是ajax技術的核心,ajax可以無刷新更新頁面得益于xhr。
一、創建

var xhr = new XMLHttpRequest();

二、發送請求
open()

xhr.open("get","example.php", false);

1.第一個參數指定請求方式
2.第二個參數url
3.第三個參數表示是否同步,默認為true(異步)
4.如果請求一個受密碼保護的URL,把用于認證的用戶名和密碼作為第4和第5個參數傳遞給open()方法

send()
如果是GET方法,send()方法無參數,或參數為null;如果是POST方法,send()方法的參數為要發送的數據
調用send()方法后,請求被分派到服務器

xhr.open("get", "example.txt", false);
xhr.send(null);

三、接收響應

responseText: 作為響應主體被返回的文本(文本形式)
responseXML: 如果響應的內容類型是'text/xml'或'application/xml',這個屬性中將保存著響應數據的XML DOM文檔(document形式)
status: HTTP狀態碼(數字形式)
statusText: HTTP狀態說明(文本形式)

四、同步
如果接受的是同步響應,則需要將open()方法的第三個參數設置為false,那么send()方法將阻塞直到請求完成。一旦send()返回,僅需要檢查XHR對象的status和responseText屬性即可。
同步請求是吸引人的,但應該避免使用它們。客戶端javascript是單線程的,當send()方法阻塞時,它通常會導致整個瀏覽器UI凍結。如果連接的服務器響應慢,那么用戶的瀏覽器將凍結。

五、異步
如果需要接收的是異步響應,這就需要檢測XHR對象的readyState屬性,該屬性表示請求/響應過程的當前活動階段。

0(UNSENT):未初始化。尚未調用open()方法
1(OPENED):啟動。已經調用open()方法,但尚未調用send()方法
2(HEADERS_RECEIVED):發送。己經調用send()方法,且接收到頭信息
3(LOADING):接收。已經接收到部分響應主體信息
4(DONE):完成。已經接收到全部響應數據,而且已經可以在客戶端使用了

理論上,只要readyState屬性值由一個值變成另一個值,都會觸發一次readystatechange事件。可以利用這個事件來檢測每次狀態變化后readyState的值。

var xhr;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
}else{
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
//異步接受響應
xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
        if(xhr.status == 200){
            //實際操作
            result.innerHTML += xhr.responseText;
        }
    }
}
//發送請求
xhr.open('get','message.xml',true);
xhr.send();
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 摘自《JavaScript高級程序設計》 一、簡述 Ajax是Asynchronous Javascript + ...
    寧小姐的慢時光閱讀 10,963評論 0 8
  • 看到標題時,有些同學可能會想:“我已經用xhr成功地發過很多個Ajax請求了,對它的基本操作已經算挺熟練了。” 我...
    前端渣渣閱讀 5,799評論 1 12
  • 在使用XHR對象時,要調用的第一個方法時open(),它接受三個參數:要發送的請求的類型("get","post"...
    章柏華閱讀 1,342評論 0 0
  • AJAX 原生js操作ajax 1.創建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,288評論 0 7
  • 本文詳細介紹了 XMLHttpRequest 相關知識,涉及內容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 13,767評論 2 18