XMLHttpRequest對象

1.XMLHttpRequest對象   html

      (1)XMLHttpRequest是XMLHTTP組件的對象,經過這個對象。AJAX可以像桌面應用程序同樣僅僅同server進行數據層面的交換。而不用每次都刷新界面,也不用每次將數據處理的工做都交給server來作;這樣既減輕了server負擔又加快了響應速度、縮短了用戶等待的時間。ajax

 

      (2)XMLHttpRequest最先是在IE5中以ActiveX組件的形式實現的。非W3C標準。
建立XMLHttpRequest對象(由於非標準因此實現方法不統一)
Internet Explorer把XMLHttpRequest實現爲一個ActiveX對象
其它瀏覽器(Firefox、Safari、Opera…)把它實現爲一個本地的JavaScript對象。

XMLHttpRequest在不一樣瀏覽器上的實現是兼容的,因此可以用相同的方式訪問XMLHttpRequest實例的屬性和方法,而不論這個實例建立的方法是什麼。瀏覽器

2.XMLHttpRequest對象初始化
緩存

	function createXHR() {
		var xmlHttp;
		try {
			// Firefox, Opera 8.0+, Safari瀏覽器
			xmlHttp = new XMLHttpRequest();
		} catch (e) {
			// IE瀏覽器
			try {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					alert("您的瀏覽器不支持AJAX!");
					return false;
				}
			}
		}
	}
3.XMLHttpRequest對象方法 


4.XMLHttpRequest對象屬性app


5.onreadystatechange對象屬性:
      該事件處理函數由server觸發,而不是用戶
在 Ajax 運行過程當中,server會通知client當前的通訊狀態。這依靠更新 XMLHttpRequest 對象的 readyState 來實現。改變 readyState 屬性是server對client鏈接操做的一種方式。
異步


每次 readyState 屬性的改變都會觸發 readystatechange事件
jsp

xmlHttp.onreadystatechange=function()
  {
  // 咱們需要在這裏寫一些代碼
  }

6.readystate屬性:

狀態 描寫敘述
0 請求未初始化(在調用 open() 以前)
1 請求已提出(調用 send() 以前)
2 請求已發送(這裏一般可以從響應獲得內容頭部)
3 請求處理中(響應中一般有部分數據可用。但是server尚未完畢響應)
4 請求已完畢(可以訪問server響應並使用它)
繪圖理解各類狀態:


7.open(method, url, asynch)方法
      XMLHttpRequest 對象的 open 方法贊成程序猿用一個Ajax調用向server發送請求。
    method:請求類型。相似 「GET」或」POST」的字符串。若僅僅想從server檢索一個文件,而不需要發送不論什麼數據,使用GET(可以在GET請求裏經過附加在URL上的查詢字符串來發送數據,只是數據限制大小爲2000個字符)。
async

若需要向server發送數據,用POST。函數


      在某些狀況下,有些瀏覽器會把多個XMLHttpRequest請求的結果緩存在同一個URL。
post

假設對每個請求的響應不一樣,這就會帶來很差的結果。把當前時間戳追加到URL的最後。就能確保URL的唯一性,從而避免瀏覽器緩存結果。 

var url = "/FirstAjax/CityServlet?

time="+new Date().getTime()+"&province="+province
url:路徑字符串,指向你所請求的server上的那個文件。可以是絕對路徑或相對路徑。
asynch:表示請求是否要異步傳輸。默認值爲true(異步)。指定true,在讀取後面的腳本以前,不需要等待server的對應。指定false,當腳本處理過程通過這點時,會停下來,一直等到Ajax請求運行完成再繼續運行。

8.send(data)方法:
open 方法定義了 Ajax 請求的一些細節。

send 方法可爲已經待命的請求發送指令
data:將要傳遞給server的字符串。
    若選用的是 GET 請求,則不會發送不論什麼數據, 給 send 方法傳遞 null 就能夠:request.send(null);假設傳值的話。server也收不到。
當向send()方法提供參數時,要確保open()中指定的方法是POST,假設沒有數據做爲請求體的一部分發送,則使用null.

9.setRequestHeader(header,value)方法:

當瀏覽器向server請求頁面時,它會伴隨這個請求發送一組首部信息。這些首部信息是一系列描寫敘述請求的元數據(metadata)。首部信息用來聲明一個請求是 GET 仍是 POST。
Ajax 請求中。發送首部信息的工做可以由 setRequestHeader完畢
參數header: 首部的名字;  參數value:首部的值。
假設用 POST 請求向server發送數據,需要將 「Content-type」 的首部設置爲 「application/x-www-form-urlencoded」.它會告知server正在發送數據,並且數據已經符合URL編碼了。
該方法必須在open()以後才幹調用
完整的 Ajax 的 POST 請求演示樣例:

           //準備以POST方式發送請求
xhr.open("post","/FirstAjax/PostServlet?

time="+new Date().getTime());
//設置請求頭,僅僅有是POST方式下,才設置該請求頭
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
//真正發送請求
xhr.send("username="+username);

10.接收方法和屬性

用 XMLHttpRequest 的方法可向server發送請求。

在 Ajax 處理過程當中,XMLHttpRequest 的例如如下屬性可被server更改:
readyState
status
responseText
responseXML

(1).readyState

readyState 屬性表示Ajax請求的當前狀態。

它的值用數字表明(前面的表格中的[0-4]數值)

    每次 readyState 值的改變,都會觸發 readystatechange 事件。假設把 onreadystatechange 事件處理函數賦給一個函數。那麼每次 readyState 值的改變都會引起該函數的運行。
readyState 值的變化會因瀏覽器的不一樣而有所差別。但是,當請求結束的時候,每個瀏覽器都會把 readyState 的值統一設爲 4

(2)status
server發送的每一個響應也都帶有首部信息。三位數的狀態碼是server發送的響應中最重要的首部信息,並且屬於超文本傳輸協議中的一部分。
常用狀態碼及其含義:
404 沒找到頁面(not found)
403 禁止訪問(forbidden)
500 內部server出錯(internal service error)
200 一切正常(ok)
304 沒有被改動(not modified)(server返回304狀態。表示源文件沒有被改動 )
在 XMLHttpRequest 對象中。server發送的狀態碼都保存在 status 屬性裏。

經過把這個值和 200 或 304 比較,可以確保server是否已發送了一個成功的響應

(3) responseText
      XMLHttpRequest 的 responseText 屬性包括了從server發送的數據.它是一個HTML,XML或普通文本。這取決於server發送的內容。(將傳回的信息當字符串使用
當 readyState 屬性值變成 4 時, responseText 屬性纔可用。代表 Ajax 請求已經結束。

(4)responseXML(將傳回的信息當XML文檔使用。可以用DOM處理。


      假設server返回的是 XML, 那麼數據將儲存在 responseXML 屬性中。
僅僅用server發送了帶有正確首部信息的數據時, responseXML 屬性纔是可用的。

MIME 類型必須爲 text/xml

11.AJAX開發步驟及具體解釋    (1)建立ajax_1.html或ajax_1.jsp    (2)加入事件    (3)在事件響應後建立Ajax引擎對象    (4)異步發送請求    (5)將響應結果放入Ajax引擎對象中    (6)從Ajax引擎對象中取得響應結果    (7)使用DOM和JS將響應結果動態加入到Html或Jsp面頁中     (8)對於POST請求,必定要設置請求頭,代碼例如如下: xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");         在open()以後。在send()以前      對於GET請求,無需設置請求頭

相關文章
相關標籤/搜索