Ajax精簡資料

2-1 標準XMLHttpRequest操作

   

   

abort()

停止當前請求

getAllResponseHeaders()

HTTP請求的所有響應首部作爲鍵/值對返回

getResponseHeader("header")

返回指定首部的串值

open("method", "url")

建立對服務器的調用。method參數可以是GETPOSTPUTurl參數可以是相對URL或絕對URL。這個方法還包括3個可選的參數

send(content)

向服務器發送請求

setRequestHeader("header", "value")

把指定首部設置爲所提供的值。在設置任何首部之前必須先調用open()

下面來更詳細地討論這些方法。

void open(string method, string url, boolean asynch, string username, string password):這個方法會建立對服務器的調用。這是初始化一個請求的純腳本方法。它有兩個必要的參數,還有3個可選參數。要提供調用的特定方法(GETPOSTPUT),還要提供所調用資源的URL。另外還可以傳遞一個Boolean值,指示這個調用是異步的還是同步的。默認值爲true,表示請求本質上是異步的。如果這個參數爲false,處理就會等待,直到從服務器返回響應爲止。由於異步調用是使用Ajax的主要優勢之一,所以倘若將這個參數設置爲false,從某種程度上講與使用XMLHttpRequest對象的初衷不太相符。不過,前面已經說過,在某些情況下這個參數設置爲false也是有用的,比如在持久存儲頁面之前可以先驗證用戶的輸入。最後兩個參數不說自明,允許你指定一個特定的用戶名和密碼。

void send(content):這個方法具體向服務器發出請求。如果請求聲明爲異步的,這個方法就會立即返回,否則它會等待直到接收到響應爲止。可選參數可以是DOM對象的實例、輸入流,或者串。傳入這個方法的內容會作爲請求體的一部分發送。

void setRequestHeader(string header, string value):這個方法爲HTTP請求中一個給定的首部設置值。它有兩個參數,第一個串表示要設置的首部,第二個串表示要在首部中放置的值。需要說明,這個方法必須在調用open()之後才能調用。

在所有這些方法中,最有可能用到的就是open()send()XMLHttpRequest對象還有許多屬性,在設計Ajax交互時這些屬性非常有用。

void abort():顧名思義,這個方法就是要停止請求。

string getAllResponseHeaders()這個方法的核心功能對Web應用開發人員應該很熟悉了,它返回一個串,其中包含HTTP請求的所有響應首部,首部包括Content-
Length
DateURI

string getResponseHeader(string header)這個方法與getAllResponseHeaders()是對應的,不過它有一個參數表示你希望得到的指定首部值,並且把這個值作爲串返回。

除了這些標準方法,XMLHttpRequest對象還提供了許多屬性,如表2-2所示。處理XMLHttpRequest時可以大量使用這些屬性。


2-2 標準XMLHttpRequest屬性

   

   

onreadystatechange

每個狀態改變時都會觸發這個事件處理器,通常會調用一個JavaScript函數

readyState

請求的狀態。有5個可取值:0 = 未初始化,1 = 正在加載,2 = 已加載,3 = 交互中,4 = 完成

responseText

服務器的響應,表示爲一個串

responseXML

服務器的響應,表示爲XML。這個對象可以解析爲一個DOM對象

status

服務器的HTTP狀態碼(200對應OK404對應Not Found(未找到),等等)

statusText

HTTP狀態碼的相應文本(OKNot Found(未找到)等等)

 





不同於標準Web客戶中所用的標準請求/響應方法,Ajax應用的做法稍有差別。

1. 一個客戶端事件觸發一個Ajax事件。從簡單的onchange事件到某個特定的用戶動作,很多這樣的事件都可以觸發Ajax事件。可以有如下的代碼:

<input type="text"d="email" name="email" οnblur="validateEmail()";>

2. 創建XMLHttpRequest對象的一個實例。使用open()方法建立調用,並設置URL以及所希望的HTTP方法(通常是GETPOST)。請求實際上通過一個send()方法調用觸發。可能的代碼如下所示:

var xmlHttp;

function validateEmail() {

   var email = document.getElementById("email");

   var url = "validate?email=" + escape(email.value);

   if (window.ActiveXObject) {

     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");

   }

   else if (window.XMLHttpRequest) {

     xmlHttp = new XMLHttpRequest();

   }

xmlHttp.open("GET", url);

xmlHttp.onreadystatechange = callback;

xmlHttp.send(null);

}

3. 向服務器做出請求。可能調用servletCGI腳本,或者任何服務器端技術。

4. 服務器可以做你想做的事情,包括訪問數據庫,甚至訪問另一個系統。

5. 請求返回到瀏覽器。Content-Type設置爲text/xml——XMLHttpRequest對象只能處理text/html類型的結果。在另外一些更復雜示例中,響應可能涉及更廣,還包括JavaScriptDOM管理以及其他相關的技術。需要說明,你還需要設置另外一些首部,使瀏覽器不會在本地緩存結果。爲此可以使用下面的代碼:

response.setHeader("Cache-Control", "no-cache");

response.setHeader("Pragma", "no-cache");[1]

6. 在這個示例中,XMLHttpRequest對象配置爲處理返回時要調用callback()函數。這個函數會檢查XMLHttpRequest對象的readyState屬性,然後查看服務器返回的狀態碼。如果一切正常,callback()函數就會在客戶端上做些有意思的工作。以下就是一個典型的回調方法:

function callback() {

   if (xmlHttp.readyState == 4) {

     if (xmlHttp.status == 200) {

          //do something interesting here

     }

   }

}

3-1  用於處理XML文檔的DOM元素屬性

屬性名

描述

childNodes

返回當前元素所有子元素的數組

firstChild

返回當前元素的第一個下級子元素

lastChild

返回當前元素的最後一個子元素

nextSibling

返回緊跟在當前元素後面的元素

nodeValue

指定表示元素值的讀/寫屬性

parentNode

返回元素的父節點

previousSibling

返回緊鄰當前元素之前的元素

3-2 用於遍歷XML文檔的DOM元素方法

方法名

描述

getElementById(id) (document)

獲取有指定惟一ID屬性值文檔中的元素

getElementsByTagName(name)

返回當前元素中有指定標記名的子元素的數組

hasChildNodes()

返回一個布爾值,指示元素是否有子元素

getAttribute(name)

返回元素的屬性值,屬性由name指定

3-3  動態創建內容時所用的W3C DOM屬性和方法

屬性/方法

描述

document.createElement(tagName)

文檔對象上的createElement方法可以創建由tagName指定的元素。如果以串div作爲方法參數,就會生成一個div元素

document.createTextNode(text)

文檔對象的createTextNode方法會創建一個包含靜態文本的節點

<element>.appendChild(childNode)

appendChild方法將指定的節點增加到當前元素的子節點列表(作爲一個新的子節點)。例如,可以增加一個option元素,作爲select元素的子節點

<element>.getAttribute(name)

<element>.setAttribute(name, value)

這些方法分別獲得和設置元素中name屬性的值

<element>.insertBefore(newNode, targetNode)

這個方法將節點newNode作爲當前元素的子節點插到targetNode元素前面

<element>.removeAttribute(name)

這個方法從元素中刪除屬性name

<element>.removeChild(childNode)

這個方法從元素中刪除子元素childNode

<element>.replaceChild(newNode, oldNode)

這個方法將節點oldNode替換爲節點newNode

<element>.hasChildnodes()

這個方法返回一個布爾值,指示元素是否有子元素

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