Ajax的核心對象XMLHttpRequest

   XMLHttpRequest是XMLHTTP組件的對象,通過這個對象,Ajax可以像桌面應用程序一樣只同服務器進行數據層的信息交換,而不用每次都刷新頁面,也不用每次將數據處理的工作都交給服務器來做;這樣即減輕了服務器的負擔又加快了響應速度、縮短了用戶等待的時間。

    XMLHttpRequest是Ajax技術中最重要的一個對象,一個頁面在不刷新的情況下可以通過XMLHttpRequest對象發送請求來獲取服務器響應。在實際開發中,設計人員可以通過使用該對象在不刷新當前頁面的情況下更新局部數據。

    XMLHttpRequest是瀏覽器已經定義好的對象,它是Ajax技術的核心組成部分,JavaScript通過它和服務器之間進行通信,並藉助它來解析從服務器傳回來的XML文件。

    需要注意的是,該對象的創建方法與瀏覽器相關,從IE 5.0瀏覽器開始,開發人員可以在Web頁面內部使用XMLHTTP ActiveX組件擴展自身的功能。Mozilla 1.0瀏覽器和NetScape 7瀏覽器則是創建繼承XML的代理類XMLHttpRequest。在大多數情況下,XMLHttpRequest對象和XMLHTTP組件都是非常接近的,他們的方法和屬性基本類似,只是在部分屬性上有所不同。

    在使用XMLHttpRequest對象發送請求和處理響應之前,必須先用JavaScript創建一個XMLHttpRequest對象。由於XMLHttpRequest不是一個W3C標準,所以可以採用多種方法使用JavaScript來創建XMLHttpRequest的實例。Internet Explorer把XMLHttpRequest實現爲一個ActiveX對象,其他瀏覽器(如Firefox、Safari和Opera)把它實現爲一個本地JavaScript對象。由於存在這些差別,JavaScript代碼中必須包含有關的邏輯,從而使用ActiveX技術或者使用本地JavaScript對象技術來創建XMLHttpRequest的一個實例。

//開始初始化XMLHttpRequest對象
        if(window.XMLHttpRequest) ...{ //Mozilla 瀏覽器
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) ...{//設置MiME類別
                http_request.overrideMimeType('text/xml');
            }
        }
        else if (window.ActiveXObject) ...{ // IE瀏覽器
            try ...{
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) ...{
                try ...{
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) ...{}
            }
        }

    雖然在不同的瀏覽器中創建該對象的方法不同,由於JavaScript腳本語言是動態的,解釋型的語言,並且XMLHttpRequest對象在不同的瀏覽器中是兼容的,因此實際編程中開發人員可以採用同樣的方式使用該對象的屬性和方法。

  XMLHttpRequest對象的相關屬性和方法
    XMLHttpRequest的方法:
    abort() 停止當前請求
    getAllResponseHeaders() 把Http請求的所有響應首部作爲鍵/值對返回
    getResponseHeader("header") 返回指定首部的字符串的值
    open(String method,String url,boolean asynchron,String username,String password) 建立對服務器的調用,其中method可以用put,get,post,參數即可以使用絕對地址也可以使用相對地址;url是表示建立的請求將要發送到目的地中進行處理;asynchron表示是否異步。
    該方法中的5個參數,其中前兩個是必須的,後三個是可選的,調用該方法將建立Ajax對服務器的調用,即完成請求的初始化的方法。在調用該方法時,需要指定調用的方法包括GET、POST及PUT,還需要提供調用資源的URL,此外,boolead類型的asynchron用於指定在進行調用時是採用同步方式還是異步方式,默認true,即異步方式。如果參數數值爲false,則採用同步方式和服務器進行交互,即進行等待知道服務器返回響應結果爲止。最後兩個參數用於在進行連接時指定特定的用戶名和密碼。
    send(context) 函數用來向服務器發送請求。可以使用的參數包括DOM對象、字符串等等。
    setRequestHeader("header","value") 該方法爲HTTP請求中給定的一個首部設置值,其中header表示要設置的首部名稱,第二個參數用於指定放在首部中的值。設置header並和請求一起發送,即指定首部設置爲所提供的值,注意在設置首部前必須先使用open()方法。

    除了上面的相關方法之外,XMLHttpRequest對象還提供了許多屬性,相關屬性名稱及功能如下:
    onreadystatechange 每個狀態改變是都會觸發這個事件處理器,通常會調用一個javascript函數
    readState 請求狀態 0=未初始化,1=正在加載 ,2=已加載 ,3=交互中,4=完成
    responseText 服務器的響應,表示爲一個串 
    responseXML 服務器的響應,表示爲xml.這個對象可以解析爲一個DOM對象
    status 服務器的http狀態碼(200對應ok,404對應not found) 
    statusText       服務器的http狀態碼相應文本

    其中,onreadystatechange屬性是狀態改變的事件觸發器,每個狀態改變時都會觸發這個事件觸發器,通常在觸發後會調用一個JavaScript腳本語言編寫的函數。

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