用戶的交互操作(interaction)驅(qū)動(dòng)著Web站點(diǎn),。理解如何處理響應(yīng)信息,特別是在使用新的交互操作形式(例如AJAX)的時(shí)候,,這一點(diǎn)非常重要的,。Kris Hadloc解釋了AJAX請(qǐng)求-響應(yīng)過程的本質(zhì),你應(yīng)該了解這些內(nèi)容,,更好地為用戶交互操作服務(wù),。 請(qǐng)求和響應(yīng) AJAX引擎分很多個(gè)方面,每個(gè)方面都很重要,。如果引擎執(zhí)行發(fā)送請(qǐng)求和接收響應(yīng)信息的事務(wù),,那么它就有很多的處理響應(yīng)信息的方法。響應(yīng)信息是處理過程中的一個(gè)重要的部分,,這是因?yàn)橛脩糇罱K會(huì)與響應(yīng)信息交互操作,。 本文詳細(xì)解釋了如何處理AJAX響應(yīng)信息,并為用戶提供反饋信息,,根據(jù)需要進(jìn)行更新,。我們從請(qǐng)求的就緒狀態(tài)開始,接著解釋響應(yīng)信息的狀態(tài),、回調(diào)(callback)和分析響應(yīng)信息,。本文還解釋了響應(yīng)信息的其它一些方面,例如加載消息,、錯(cuò)誤處理和顯示響應(yīng)信息,。 我建立了一個(gè)示例可供大家下載。這個(gè)示例包含了一個(gè)面向?qū)ο蟮腁JAX引擎,,你可以在任何AJAX應(yīng)用程序中再次使用它,。在討論響應(yīng)信息之前,我要指出如何建立AJAX引擎并發(fā)出請(qǐng)求,。首先,,讓我們來看看AJAX引擎的代碼(沒有帶上響應(yīng)信息處理部分):
為了建立這個(gè)對(duì)象并發(fā)出請(qǐng)求,你只需要使用下面兩行代碼:
上面的第二行代碼反映了你選擇的請(qǐng)求方法,、XML的路徑或請(qǐng)求的服務(wù)器端腳本,、當(dāng)接收到響應(yīng)信息時(shí)你希望調(diào)用的回調(diào)方法。現(xiàn)在你對(duì)AJAX引擎和如何發(fā)出請(qǐng)求已經(jīng)有了一定的了解,,我們來看看如何處理請(qǐng)求,。 就緒(Ready)狀態(tài) 就緒狀態(tài)由回調(diào)方法來處理,當(dāng)我們做出請(qǐng)求的時(shí)候,回調(diào)方法就已經(jīng)設(shè)置好了,。在例子中,,onResponse被設(shè)置為回調(diào)方法,它在本文中被用于處理所有的分析代碼的操作,。我們將使用下面的代碼來檢測(cè)回調(diào)方法中的AJAX對(duì)象的就緒狀態(tài):
上面的代碼顯示,,我們將向checkReadyState方法傳遞四個(gè)參數(shù),。第一個(gè)參數(shù)是我們希望顯示的加載(loading)消息div的ID、其它三個(gè)參數(shù)都是自定義的對(duì)應(yīng)于不同狀態(tài)的加載消息,。我選擇的用于加載消息的div的名字是body,,它使得新數(shù)據(jù)在被載入的時(shí)候,,內(nèi)容和加載消息是合并在一起的。下面是實(shí)際的checkReadyState方法,,它處理了我們剛才討論的代碼,,并在div中向我們傳遞進(jìn)去的參數(shù)來顯示它。這個(gè)方法也被包含在示例AJAX引擎中了,。
checkReadyState方法為用戶提供頁面狀態(tài)的反饋信息是有用處的,。下表顯示了它檢測(cè)的值:
你可以為每種加載狀態(tài)添加一個(gè)自定義的消息--它可以是一個(gè)簡單的字符串,也可以是字符串格式的圖片標(biāo)簽(例如顯示一個(gè)動(dòng)畫的加載GIF),。下面就是一個(gè)例子:
不僅checkReadyState方法處理請(qǐng)求狀態(tài),,它所包含的HTTP對(duì)象也會(huì)檢測(cè)和返回請(qǐng)求的狀態(tài)。 請(qǐng)求狀態(tài) · 信息的 1xx · 成功的 2xx · 重定向 3xx · 客戶端錯(cuò)誤 4xx · 服務(wù)器錯(cuò)誤 5xx 上面的數(shù)字中的最前面一位表示某種類別的狀態(tài)代碼,。例如,,成功的是2xx,它的意思是包含了200-299之間的所有狀態(tài)代碼,。HTTP對(duì)象檢查狀態(tài)代碼的第一位數(shù)字,,并根據(jù)代碼所屬的類別,執(zhí)行一次轉(zhuǎn)換,。在檢測(cè)出類別之后,,HTTP對(duì)象把它發(fā)送給響應(yīng)方法,該方法把狀態(tài)代碼作為字符串的形式返回,。這就是HTTP狀態(tài)方法:
狀態(tài)代碼是通過檢測(cè)該代碼的第一位數(shù)字來處理的,。一旦完成了代碼檢測(cè),原始的狀態(tài)代碼就被發(fā)送到一個(gè)適當(dāng)?shù)姆椒ㄖ?,該方法給onResponse方法發(fā)送一個(gè)字符串形式的狀態(tài)代碼,。接著我們就可以把這條消息顯示給用戶,如果遇到了什么錯(cuò)誤,她/他就知道發(fā)生了什么情況,。另一方面,,如果請(qǐng)求是成功的,那么就顯示數(shù)據(jù),。 ResponseText和ResponseXML 響應(yīng)信息的內(nèi)容可能有多種不同的形式,,例如XML、純文本,、(X)HTML或JavaScript對(duì)象符號(hào)(JSON),。我們可以根據(jù)所接收到的數(shù)據(jù)格式的不同,用兩種不同的方法來處理:使用responseText或者responseXML,。responseText方法用于那些并非基于XML的格式,。它把響應(yīng)信息作為字符串,返回精確的內(nèi)容,。純文本,、(X)HTML和JSON都使用responseText。在純文本或HTML上使用這個(gè)方法是很簡單的:
它最簡單不過了,!一旦載入響應(yīng)信息完成,,我們就調(diào)用AJAX對(duì)象,用responseText來檢索它的值,,并把它添加到頁面上,。 處理JSON響應(yīng)信息比處理純文本或(X)HTML需要多一點(diǎn)技巧。下面是我們分析一個(gè)JSON文件的示例:
數(shù)據(jù)被冒號(hào)(:)分成了兩個(gè)部分:標(biāo)簽名稱和值,。附加的數(shù)據(jù)被逗號(hào)(,)分成新的名稱/值對(duì)?,F(xiàn)在我們知道了JSON的樣子了,下面是我們分析它的方法:
JSON數(shù)據(jù)首先由JavaScript來分析(使用簡單的eval()過程),。一旦數(shù)據(jù)被分析好了并建立了響應(yīng)信息對(duì)象,,我們就可以簡單地通過名字來獲取它們的響應(yīng)信息值。 responseText不僅可以給頁面添加內(nèi)容,,它在調(diào)試AJAX請(qǐng)求的時(shí)候也有用處,。例如,你可能還沒有準(zhǔn)備好分析數(shù)據(jù),,因?yàn)槟氵€不知道所有的標(biāo)簽是什么樣的,,是XML格式的還是JSON文件。這就要求有一種用于檢測(cè)被分析數(shù)據(jù)的途徑,。一旦你知道了所有的標(biāo)簽名稱,,所需要做的事情就只是編寫代碼了。 responseXML的使用也相當(dāng)簡單,。但是與JSON格式類似,,XML要求進(jìn)行數(shù)據(jù)分析,。我們需要執(zhí)行的第一項(xiàng)事務(wù)是識(shí)別出XML響應(yīng)信息中的根節(jié)點(diǎn)。
下一步,,我們通過名稱獲取所有的元素并得到它們的值:
最后,,我們把響應(yīng)信息顯示在相應(yīng)的div標(biāo)記中:
用JavaScript的時(shí)候,JSON比XML要快一些,,這是因?yàn)镴SON所需要的分析代碼比XML少很多,,直接導(dǎo)致在分析大量數(shù)據(jù)的時(shí)候,JSON的速度較快,。JSON不如XML的地方在于XML受到的支持更大,、服務(wù)器端開發(fā)選項(xiàng)更多。你可以根據(jù)環(huán)境和請(qǐng)求的用途來做出選擇,。 AJAX響應(yīng)信息是AJAX通訊中的一個(gè)重要的部分,。你需要處理很多方面的信息,,包括就緒狀態(tài),、錯(cuò)誤處理和加載狀態(tài),并最終顯示出來,。有了這些信息之后,,你就可以把注意力集中在響應(yīng)信息上,為用戶提供更多的信息,。 (責(zé)任編輯:銘銘 mingming_ky#126.com TEL:(010)-68476636) |
|