Ajax之XMLHttpRequest對象

XMLHttpRequest對象

我對XMLHttpRequest對象使用的理解:
1.創建:

var xhr=new XMLHttpRequest();

2.打開:

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

open()接受三個參數:要發送的請求的類型(”get”、”post”等)、請求的URL和表示是否異步發送請求的布爾值。

這行代碼會啓動一個針對example.php的GET請求。有關這行代碼,需要說明兩點:一是URL相對於執行代碼的當前頁面(當然也可以使用絕對路徑);二是調用open()並不會真正發送請求,而只是啓動一個請求以備發送。
3.發送:

xhr.send(null);

這裏的send()方法接收一個參數,即要作爲請求主體發送的數據。如果不需要通過請求主體發送數據,則必須傳入null,因爲這個參數對有些瀏覽器來說是必需的。調用send()之後,請求就會被分派到服務器。

注意:

由於在IE7以前的版本中,可能會遇到三種不同版本的XHR對象,而IE7+、Firefox、Opera、Chrome和Safari都支持原生的XHR對象。所以可以使用下面的代碼在所有瀏覽器中創建XHR對象:

function createXHR(){
    if(typeof XMLHttpRequest !="undefined"){
        return new XMLHttpRequest();
    }else if(typeof ActiveXObject !="undefined"){


        if(typeof arguments.callee.activeXString != "string"){
        var versions=["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;
        for(i=0,len=versions.length;i<len;i++){
                try{
                    new ActiveXObject(versions[i]); 
                    arguments.callee.activeXString=version[i];
                    break;
                }catch (ex){
                    //跳過
                }
            }

        }
        return new ActiveXObject(arguments.callee.activeXString);



    }else{
            throw new Error("No XHR object avilable.");
        }
}

如果open()中的第三個參數是false,也就是說如果請求是同步的,JavaScript代碼會等到服務器響應之後再繼續執行。在收到響應後,響應的數據就會自動填充XHR對象的屬性,相關的屬性簡介如下:

  • responseText: 作爲響應主體被返回的文本。
  • responseXML: 如果響應的內容類型是”text/xml”或”application/xml”,這個屬性中將保存包含着響應數據的XML
  • status: 響應的HTTP狀態
  • statusText: HTTP狀態的說明

當發送異步請求時,可以檢測XHR對象的readyState屬性,該屬性表示請求/響應過程的當前活動階段。這個屬性可取的值如下:

  • 0:未初始化。尚未調用open()方法
  • 1:啓動。已經調用open()方法,但尚未調用send()方法。
  • 2:發送。已經調用send()方法,但尚未接收到響應。
  • 3:接收。已經接收到部分響應數據。
  • 4:完成。已經接收到全部響應數據,而且已經可以在客戶端使用了。
var xhr=createXHR();
xhr.onreadystatechange=function(){
    if(xhr.readyState==4){
        if((xhr.status>=200 && xhr.status<300)||xhr.status==304){
            alert(xhr.responseText);
        }else{
            alert("Request was unsuccessful:"+xhr.status);
        }
    }
};

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

另外,在接收到響應之前還可以調用abort()方法來取消異步請求,如下:

xhr.abort();

調用這個方法後,XHR對象會停止觸發時間,而且也不再允許訪問任何與響應有關的對象屬性。在終止請求之後,還應該對XHR對象進行解引用操作。由於內存原因,不建議重用XHR對象。

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