AJAX 使用XMLHttpRequest對象發送和接受數據

 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對象。javascript

<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應用程序時必定要注意要兼容瀏覽器類型。java

建立方式能夠以下:數組

 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請求,監聽服務器狀態,並在服務器完成數據響應處理以後接收服務器端返回的信息數據。下面是對其的說明:
onreadystatechange:指定當readyState屬性改變時的事件處理句柄,屬性只寫。
    XMLHttpRequest 對象屬性onreadystatechange是readyState狀態改變的事件觸發器,用來指定當readyState屬性發生改變時的處理事件。 在使用過程當中,一般經過將事件處理函數名稱賦予onreadystatechange的方式,來爲XMLHttpRequest指定事件觸發器,而在事件 處理函數中判斷readyState狀態值並作相應的處理。
    如上:http_request.onreadystatechange = processRequest;processRequest做爲事件處理函數,並在processRequest函數體內在readyState狀態爲 4 時開始執行。
 responseBody:將回應信息正文以unsigned byte 數組形式返回,屬性只讀。
 responseXML:將響應信息格式化爲XML Document對象返回,屬性只讀。
   
    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請求的狀態行,屬性只讀。
瀏覽器

  總結,五個步驟:服務器

        1.建立XMLHttpRequest對象。異步

        2.註冊回調函數 xmlhttp.oncreadystatechange = 函數名 ;       //注意:該函數名後面不須要加括號。async

        3.設置鏈接信息 xmlhttp.open();ide

          xmlhttp.open(請求方式,url,是否同步.);           //第一個參數,請求方式,通常get or post,第二個參數,請求url,get請求參數也在裏面,第三個參數,true or false ,true表示異步.函數

        4.發送數據。xmphttp.send(data);post

相關文章
相關標籤/搜索