【正文】
}, plete: function(){ // Handle the plete event } // ... })。全局事件是每次的 Ajax 請(qǐng)求都會(huì)觸發(fā)的,它會(huì)向 DOM 中的所有元素廣播,在上面 getScript()示例中加載的腳本就是全局 Ajax 事件。全局事件可以如下定義: $(loading).bind(ajaxSend, function(){ $(this).show()。 }).bind(ajaxComplete, function(){ $(this).hide()。 })?;蛘撸?$(loading).ajaxStart(function(){ $(this).show()。 })。 我們可以在特定的請(qǐng)求將全局事件禁用,只要設(shè)置下 global 選項(xiàng)就可以了: $.ajax({ url: , global: false,// 禁用全局 Ajax 事件. // ... })。下面是 jQuery 官方給出的完整的 Ajax 事件列表:ajaxStart(Global Event)基于 jQuery 的 Ajax 聊天室應(yīng)用 14 This event is broadcast if an Ajax request is started and no other Ajax requests are currently running.beforeSend(Local Event)This event, which is triggered before an Ajax request is started, allows you to modify the XMLHttpRequest object (setting additional headers, if need be.)ajaxSend(Global Event)This global event is also triggered before the request is run.success(Local Event)This event is only called if the request was successful (no errors from the server, no errors with the data).ajaxSuccess(Global Event)This event is also only called if the request was successful.error(Local Event)This event is only called if an error occurred with the request (you can never have both an error and a success callback with a request).ajaxError(Global Event)This global event behaves the same as the local error event.plete(Local Event)This event is called regardless of if the request was successful, or not. You will always receive a plete callback, even for synchronous requests.ajaxComplete(Global Event)This event behaves the same as the plete event and will be triggered every time an Ajax request finishes.ajaxStop(Global Event)This global event is triggered if there are no more Ajax requests being processed.具體的全局事件請(qǐng)參考 API 文檔。好了,下面開(kāi)始介紹 jQuery 里面功能最強(qiáng)的 Ajax 請(qǐng)求方法$.ajax()。( options ):通過(guò) HTTP 請(qǐng)求加載遠(yuǎn)程數(shù)據(jù)。這個(gè)是 jQuery 的底層 Ajax 實(shí)現(xiàn)。簡(jiǎn)單易用的高層實(shí)現(xiàn)見(jiàn)$.get,$.post 等。$.ajax()返回其創(chuàng)建的 XMLHttpRequest 對(duì)象。大多數(shù)情況下你無(wú)需直接操作該對(duì)象,但特殊情況下可用于手動(dòng)終止請(qǐng)求。注意:如果你指定了 dataType 選項(xiàng),請(qǐng)確保服務(wù)器返回正確的 MIME 信息, (如xml 返回text/xml) 。錯(cuò)誤的 MIME 類型可能導(dǎo)致不可預(yù)知的錯(cuò)誤。見(jiàn) Specifying the Data Type for AJAX Requests。當(dāng)設(shè)置 datatype 類型為‘ script’的時(shí)候,所有的遠(yuǎn)程(不在同一個(gè)域中)POST 請(qǐng)求都回轉(zhuǎn)換為 GET 方式。$.ajax()只有一個(gè)參數(shù):參數(shù) key/value 對(duì)象,包含各配置及回調(diào)函數(shù)信息。詳細(xì)參數(shù)選項(xiàng)見(jiàn)下:jQuery 中,可以跨域加載 JSON 數(shù)據(jù),使用時(shí)需將數(shù)據(jù)類型設(shè)置為 JSONP。使用 JSONP 形式調(diào)用函數(shù)時(shí),如“myurl?callback=?”jQuery 將自動(dòng)替換?為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。數(shù)據(jù)類型設(shè)置為“jsonp”時(shí),jQuery 將自動(dòng)調(diào)用回調(diào)函數(shù)。參數(shù)列表:畢業(yè)設(shè)計(jì)(論文) 15 參數(shù)名 類型 描述url String (默認(rèn):當(dāng)前頁(yè)地址)發(fā)送請(qǐng)求的地址。type String (默認(rèn):GET)請(qǐng)求方式 (POST或GET ) ,默認(rèn)為GET。注意:其它 HTTP 請(qǐng)求方法,如 PUT 和DELETE 也可以使用,但僅部分瀏覽器支持。timeout Number 設(shè)置請(qǐng)求超時(shí)時(shí)間(毫秒) 。此設(shè)置將覆蓋全局設(shè)置。async Boolean (默認(rèn): true ) 默認(rèn)設(shè)置下,所有請(qǐng)求均為異步請(qǐng)求。如果需要發(fā)送同步請(qǐng)求,請(qǐng)將此選項(xiàng)設(shè)置為 false。注意,同步請(qǐng)求將鎖住瀏覽器,用戶其它操作必須等待請(qǐng)求完成才可以執(zhí)行。beforeSend Function 發(fā)送請(qǐng)求前可修改 XMLHttpRequest 對(duì)象的函數(shù),如添加自定義 HTTP 頭。XMLHttpRequest 對(duì)象是唯一的參數(shù)。function (XMLHttpRequest) { this。 // the options for this ajax request}cache Boolean (默認(rèn):true)jQuery 新功能,設(shè)置為 false 將不會(huì)從瀏覽器緩存中加載請(qǐng)求信息。plete Function 請(qǐng)求完成后回調(diào)函數(shù)(請(qǐng)求成功或失敗時(shí)均調(diào)用) 。參數(shù):XMLHttpRequest 對(duì)象,成功信息字符串。function (XMLHttpRequest, textStatus) { this。 // the options for this ajax request}contentType String (默認(rèn):application/xformurlencoded)發(fā)送信息至服務(wù)器時(shí)內(nèi)容編碼類型。默認(rèn)值適合大多數(shù)應(yīng)用場(chǎng)合。data Object,String發(fā)送到服務(wù)器的數(shù)據(jù)。將自動(dòng)轉(zhuǎn)換為請(qǐng)求字符串格式。GET 請(qǐng)求中將附加在 URL 后。查看 processData 選項(xiàng)說(shuō)明以禁止此自動(dòng)轉(zhuǎn)換。必須為 Key/Value 格式。如果為數(shù)組,jQuery 將自動(dòng)為不同值對(duì)應(yīng)同一個(gè)名稱。如 {foo:[bar1, bar2]}轉(zhuǎn)換為39。amp。foo=bar1amp。foo=bar239。dataType String 預(yù)期服務(wù)器返回的數(shù)據(jù)類型。如果不指定,jQuery 將自動(dòng)根據(jù) HTTP 包 MIME 信息返回 responseXML 或 responseText,并作為回調(diào)函數(shù)參數(shù)傳遞,可用值:xml:返回 XML 文檔,可用 jQuery 處理。html:返回純文本 HTML 信息;包含 script 元素。script:返回純文本 JavaScript 代碼。不會(huì)自動(dòng)緩存結(jié)果。json:返回 JSON 數(shù)據(jù) ?;?jQuery 的 Ajax 聊天室應(yīng)用 16 jsonp:JSONP 格式。使用 JSONP 形式調(diào)用函數(shù)時(shí),如myurl?callback=?,jQuery 將自動(dòng)替換?為正確的函數(shù)名,以執(zhí)行回調(diào)函數(shù)。error Function (默認(rèn):自動(dòng)判斷(xml 或 html) )請(qǐng)求失敗時(shí)將調(diào)用此方法。這個(gè)方法有三個(gè)參數(shù):XMLHttpRequest 對(duì)象,錯(cuò)誤信息, (可能)捕獲的錯(cuò)誤對(duì)象。function (XMLHttpRequest, textStatus, errorThrown) { // 通常情況下 textStatus 和 errorThown 只有其中一個(gè)有值 this。 // the options for this ajax request}global Boolean (默認(rèn):true)是否觸發(fā)全局 AJAX 事件。設(shè)置為false 將不會(huì)觸發(fā)全局 Ajax 事件,如 ajaxStart 或ajaxStop。可用于控制不同的 Ajax 事件ifModified Boolean (默認(rèn):false)僅在服務(wù)器數(shù)據(jù)改變時(shí)獲取新數(shù)據(jù)。使用 HTTP 包 LastModified 頭信息判斷。processData Boolean (默認(rèn): true )默認(rèn)情況下,發(fā)送的數(shù)據(jù)將被轉(zhuǎn)換為對(duì)象(技術(shù)上講并非字符串)以配合默認(rèn)內(nèi)容類型application/xformurlencoded。如果要發(fā)送 DOM樹信息或其它不希望轉(zhuǎn)換的信息,請(qǐng)?jiān)O(shè)置為 false。success Function 請(qǐng)求成功后回調(diào)函數(shù)。這個(gè)方法有兩個(gè)參數(shù):服務(wù)器返回?cái)?shù)據(jù),返回狀態(tài)function (data, textStatus) { // data could be xmlDoc, jsonObj, html, text, etc... this。 // the options for this ajax request}這里有幾個(gè) Ajax 事件參數(shù): beforeSend,success , plete,error。我們可以定義這些事件來(lái)很好的處理我們的每一次的 Ajax 請(qǐng)求。注意一下,這些 Ajax 事件里面的this 都是指向 Ajax 請(qǐng)求的選項(xiàng)信息的(請(qǐng)參考圖 31) 。請(qǐng)認(rèn)真閱讀上面的參數(shù)列表,如果要用 jQuery 來(lái)進(jìn)行 Ajax 開(kāi)發(fā),那么這些參數(shù)你都必需熟知的。畢業(yè)設(shè)計(jì)(論文) 17 第 4 章 系統(tǒng)設(shè)計(jì) 基于 jQuery 的 Ajax 聊天室 功能要求聊天室是一個(gè)提供人們?cè)诰€溝通交流和聯(lián)系的平臺(tái)。本系統(tǒng)的總目標(biāo)是在計(jì)算機(jī)網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)和先進(jìn)的開(kāi)發(fā)平臺(tái) MyEclipse 上,利用 Tomcat,配置一定的硬件,開(kāi)發(fā)一個(gè)具有開(kāi)放體系結(jié)構(gòu)的、易擴(kuò)充的、易維護(hù)的、具有良好人機(jī)交互界面的無(wú)刷新聊天室。該聊天室不但可以實(shí)時(shí)顯示在線人員列表,而且可以實(shí)時(shí)顯示聊天信息,可以提供多人同時(shí)在線聊天。 聊天室總體功能結(jié)構(gòu)圖滔滔聊天室聊天登陸注冊(cè)圖 41 聊天室總體功能結(jié)構(gòu)圖 聊天室總體架構(gòu)本系統(tǒng)采用了時(shí)下比較流行的三層架構(gòu),即表現(xiàn)層(展現(xiàn)給用戶的界面,方便用戶和系統(tǒng)進(jìn)行交互) 、業(yè)務(wù)邏輯層(處理涉及到的業(yè)務(wù)邏輯)和數(shù)據(jù)訪問(wèn)(直接和數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交換)層,使得系統(tǒng)能夠適應(yīng)多種不同的使用環(huán)境。當(dāng)環(huán)境發(fā)生一系列的變化時(shí),對(duì)系統(tǒng)所要做的只是改變其配置文件,極大的增加了系統(tǒng)的擴(kuò)展性。以下將簡(jiǎn)要描述三層體系結(jié)構(gòu)。1. 三層體系所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫(kù)之間加入了一個(gè)“中間層” ,也叫組件層。這里所說(shuō)的三層體系,不是指物理上的三層,不是簡(jiǎn)單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu),也不僅僅有 B/S 應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即使這三個(gè)層放置到一臺(tái)機(jī)器上。三層體系的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問(wèn)、合法性校驗(yàn)等工作放到了中間層進(jìn)行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫(kù)進(jìn)行交互,而是通過(guò) COM/DCOM 通訊基于 jQuery 的 Ajax 聊天室應(yīng)用 18 與中間層建立連接,再經(jīng)由中間層與數(shù)據(jù)庫(kù)進(jìn)行交互。一個(gè)好的分層式結(jié)構(gòu),可以使得開(kāi)發(fā)人員的分工更加明確。一旦定義好各層次之間的接口,負(fù)責(zé)不同邏輯設(shè)計(jì)的開(kāi)發(fā)人員就可以分散關(guān)注,齊頭并進(jìn)。例如 UI 人員只需考慮用戶界面的體驗(yàn)與操作,領(lǐng)域的設(shè)計(jì)人員可以僅關(guān)注業(yè)務(wù)邏輯的設(shè)計(jì),而數(shù)據(jù)庫(kù)設(shè)計(jì)人員也不必為繁瑣的用戶交互而頭疼了。每個(gè)開(kāi)發(fā)人員的任務(wù)得到了確認(rèn),開(kāi)發(fā)進(jìn)度就可以迅速的提高。松散耦合的好處是顯而易見(jiàn)的。如果一個(gè)系統(tǒng)沒(méi)有分層,那么各自的邏輯都緊緊糾纏在一起,彼此間相互依賴,誰(shuí)都是不可替換的。一旦發(fā)生改變,則牽一發(fā)而動(dòng)全身,對(duì)項(xiàng)目的影響極為嚴(yán)重。降低層與層間的依賴性,既可以良好地保證未來(lái)的可擴(kuò)展,在復(fù)用性上也是優(yōu)勢(shì)明顯。每個(gè)功能模塊一旦定義好統(tǒng)一的接口,就可以被各個(gè)模塊所調(diào)用,而不用為相同的功能進(jìn)行重復(fù)地開(kāi)發(fā)。進(jìn)行好的分層式結(jié)構(gòu)設(shè)計(jì),標(biāo)準(zhǔn)也是必不可少的。只有在一定程度的標(biāo)準(zhǔn)化基礎(chǔ)上,這個(gè)系統(tǒng)才是可擴(kuò)展的,可替換的。而層與層之間的通信也必然保證了接口的標(biāo)準(zhǔn)化。如果現(xiàn)在用的系統(tǒng)是 SQL Server 數(shù)據(jù)庫(kù),由于各種原因要更改用