Ajax與XMLHttpRequest對象

來源:互聯網
上載者:User
         XMLHttpRequest是XMLHttp組件的對象,通過這個對象,Ajax可以像傳統型應用程式一樣只與伺服器進行資料層的交換,而不必每次都重新整理介面,也不必每次將資料處理的工作都交給伺服器來做;這樣既減輕了伺服器負擔又回憶了響應速度,縮短了使用者的等待時間。
 XMLHttpRequest對象與Ajax
       在Ajax應用程式中,XMLHttpRequest對象負責將使用者資訊以非同步通訊地發送到伺服器端,並接收伺服器響應資訊和資料。
       需要注意的是JavaScript本身並不具有向伺服器發送請求的能力,要麼使用window.open()方法重新開啟一個頁面,要麼使用XMLHttpRequest對象發送請求,不同的是,前者是普通的即同步互動模式,而後者是非同步互動模式。
       XMLHttpRequest對象的屬性和方法。
       IE5.0開始,開發人員就可以在WEB頁面內部使用XMLHTTP ActiveX組件擴充自身的功能,而Mozilla1.0及NetScape7則是建立繼承XML的代理類XMLHttpRequest;對於大多情況XMLHttpRequest和XMLHttp組件很相似,方法和屬性類似,只是部份屬性不同。以下代碼示範了如果在IE以及NetScape等瀏覽器中建立XMLHttpRequest對象。

<script language="javascript">
        //定義一個變數
        var http_request = false;
        //IE瀏覽器中建立
        http_request = new ActiveXObject("Msxml2.XMLHTTP");//新版本IE
        http_request = new ActiveXObject("Microsoft.XMLHTTP");//舊版本IE
        //Netscope瀏覽器
        http_request = new XMLHttpRequest();
    </script>

      需要注意的是 在微軟最新的 IE7.0版本瀏覽器中也已經支援了XMLHttpRequest,也就是說在IE7.0中同時支援以及上二種建立方式。在我們開發AJAX應用程式時一定要注意要相容瀏覽器類型。
      建立方式可以如下:

    var http_request = false;
    function createXMLHttpRequest()
    {        
        http_request = false;
        //開始初始化XMLHTTPRequest對象
        if(window.XMLHttpRequest)//如果是window.XMLHttpRequest對象
        {
            //Mozilla,netscape 瀏覽器
            http_request = new XMLHttpRequest();    
            if (http_request.overrideMimeType) {//設定MiME類別
            //有些版本的瀏覽器在處理伺服器返回的未包含XML mime-type頭部資訊的內容時會報錯,因此,要確保返回的內容包含text/xml資訊。
            http_request.overrideMimeType("text/xml");
        }
        }
        else if(window.ActiveXObject)//如果是window.ActiveXObject
        {
            //IE瀏覽器
            try
            {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");//IE較新版本
            }
            catch (e)
            {
                try
                {
                    http_request = new ActiveXObiect("Microsoft.XMLHTTP"); //ie舊版本
                }
                catch (e){}
            }
        }
        if(!http_request)
        {
            //異常,建立對象執行個體失敗
            window.alert("不能建立XMLHttpRequest對象執行個體。");
            return false;
        }
    }

這樣就是一個簡單的跨瀏覽器的建立方法。

      另外XMLHttpRequest對象提供了一系列屬性和方法,來向伺服器端發起非同步HTTP請求,監聽伺服器狀態,並在伺服器完成資料響應處理之後接收伺服器端返回的資訊資料。下面是對其的說明:
 XMLHttpRequest 對象屬性
 
 onreadystatechange:指定當readyState屬性改變時的事件處理控制代碼,屬性唯寫。
    XMLHttpRequest對象屬性onreadystatechange是readyState狀態改變的事件觸發程序,用來指定當readyState屬性發生改變時的處理事件。在使用過程中,通常通過將事件處理函數名稱賦予onreadystatechange的方式,來為XMLHttpRequest指定事件觸發程序,而在事件處理函數中判斷readyState狀態值並做相應的處理。
    如上:http_request.onreadystatechange = processRequest;processRequest作為事件處理函數,並在processRequest函數體內在readyState狀態為 4 時開始執行。
 readyState:返回當前請求的狀態,屬性唯讀。
    這些狀態用長度為4的整形資料表示,其屬性的狀態含義如下:
    0:未初始化(對象已經建立,但是未初始化,即尚未調用open方法建立http請求)
    1:初始化(對象已經建立,但是未調用send方法發送http請求)
    2:發送資料(send方法已經被調用,但是當前的狀態以及http頭未知)
    3:資料傳送中(已經接收部分資料,因為響應及http頭不全,這時通過response系統方法擷取部分資料會出現錯誤)
    4:傳送完成(資料完畢,此時可以通過response系統方法擷取完整的回應資料)
 responseBody:將回應資訊本文以unsigned byte 數組形式返回,屬性唯讀。
 responseText:以字串的形式返回伺服器響應資訊,屬性唯讀。
 responseXML:將響應資訊格式化為XML Document對象返回,屬性唯讀。
   
    XMLHttpRequest對象的方法以及含義如下
    abort:取消當前請求;
        文法:http_request.abort();調用此方法,當前請求返回uninitialized狀態。
    getAllResourceHeaders:擷取相應的全部http頭資訊;像JSP中的HttpServletRequest對象一樣,擷取http請求的     要求標頭資訊,文法:headers = http_request.getAllResourceHeaders();
    getResourceHeader:從響應資訊中擷取指定的http頭資訊。
        文法:head = http_request.getResourceHeader("header-name");
    open:建立一個新的http請求,並指定此請求的方法,URL,以及驗證資訊(使用者名稱/密碼)。
        文法:http_request.open(method,url,async,user,password);
        async為布爾值,指定請求是否非同步方式,預設為true;如果為真,當state狀態改變時會調用onreadystatechange屬性指向的回呼函數。如果伺服器需要驗證,則應該指定使用者名稱和密碼 。
    send:發送請求到http伺服器並接收回應。建立http請求後,就可以向伺服器發送http請求,send方法被調用
       文法:http_request.send(varBody);
      參數varBody為要發送給伺服器的內容。如果沒有內容要發送,varBody參數可以省略,但最好寫為null,因為如果省略不寫在Firfox中會報錯,所以就為http_request.send(null);。此方法的同步或非同步方式取決於open方法中的async參數。
    setRequestHeader:單獨設定請求的某個頭。
 status:返回當前HTTP請求的狀態代碼,屬性唯讀。如:404=“檔案未找到”,200=“成功”
 statusText:返回當前HTTP請求的狀態行,屬性唯讀。

相關文章

聯繫我們

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