久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

深入理解AJAX響應(yīng)信息的處理 - 51CTO.COM

 通徹之冰 2010-12-23

    AJAX響應(yīng)信息是AJAX通訊中的一個(gè)重要的部分。理解如何處理響應(yīng)信息,,特別是在使用新的交互操作形式的時(shí)候,,這一點(diǎn)非常重要的,。本文解釋了AJAX請(qǐng)求-響應(yīng)過程的本質(zhì),并分析了如何處理AJAX響應(yīng)信息,。

    用戶的交互操作(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)信息處理部分):

    document.write(" ");
    function Ajax()
    {
     this.toString = function() { return "Ajax"; }
     this.http = new HTTP();
     this.makeRequest = function(_method, _url, _callbackMethod)
     {

    this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject("MSXML2.XMLHTTP");

    this.request.onreadystatechange = _callbackMethod;

    this.request.open(_method, _url, true);

    this.request.send(_url);
     }
    }

    為了建立這個(gè)對(duì)象并發(fā)出請(qǐng)求,你只需要使用下面兩行代碼:

    var ajax = new Ajax();
    ajax.makeRequest(''GET'', ''xml/content.xml'', onResponse);

    上面的第二行代碼反映了你選擇的請(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):

    function onResponse()
    {
     if(ajax.checkReadyState(''body'', ''loading...'', ''loading...'', ''loading...'') == "OK")
     {

    // 此處是分析代碼
     }
    }

    上面的代碼顯示,,我們將向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引擎中了,。

    this.checkReadyState = function(_id, _1, _2, _3)
    {
     switch(this.request.readyState)
     {

    case 1:

     document.getElementById(_id).innerHTML = _1;

     break;

    case 2:

     document.getElementById(_id).innerHTML = _2;

     break;

    case 3:

     document.getElementById(_id).innerHTML = _3;

     break;

    case 4:

     document.getElementById(_id).innerHTML = "";

     return this.http.status(this.request.status);
     }
    }

    checkReadyState方法為用戶提供頁面狀態(tài)的反饋信息是有用處的,。下表顯示了它檢測(cè)的值:

    狀態(tài)
    0 Uninitialized(未初始化)
    1 Loading(正在載入)
    2 Loaded(已經(jīng)載入)
    3 Interactive(交互)
    4 Complete(完成)

    你可以為每種加載狀態(tài)添加一個(gè)自定義的消息--它可以是一個(gè)簡單的字符串,也可以是字符串格式的圖片標(biāo)簽(例如顯示一個(gè)動(dòng)畫的加載GIF),。下面就是一個(gè)例子:

    var loader = "";
    ajax.checkReadyState(''body'', loader, loader, loader);

    不僅checkReadyState方法處理請(qǐng)求狀態(tài),,它所包含的HTTP對(duì)象也會(huì)檢測(cè)和返回請(qǐng)求的狀態(tài)。

    請(qǐng)求狀態(tài)
    該AJAX對(duì)象的請(qǐng)求狀態(tài)與被請(qǐng)求文件的HTTP狀態(tài)是一樣的,。包含在AJAX文件中的HTTP對(duì)象處理了所有的W3C描述的HTTP狀態(tài)代碼定義,,并把它們返回給請(qǐng)求方法。狀態(tài)代碼被分成了五個(gè)部分:

    · 信息的 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)方法:

    this.status = function(_status)
    {
     var s = _status.toString().split("");
     switch(s[0])
     {

    case "1":

     return this.getInformationalStatus(_status);

     break;

    case "2":

     return this.getSuccessfulStatus(_status);

     break;

    case "3":

     return this.getRedirectionStatus(_status);

     break;

    case "4":

     return this.getClientErrorStatus(_status);

     break;

    case "5":

     return this.getServerErrorStatus(_status);

     break;
     }
    }

    狀態(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è)方法是很簡單的:

    if(ajax.checkReadyState(''body'', ''loading...'', ''loading...'', ''loading...'') == "OK")
    {
     document.getElementById(''body'').innerHTML = ajax.request.responseText;
    }

    它最簡單不過了,!一旦載入響應(yīng)信息完成,,我們就調(diào)用AJAX對(duì)象,用responseText來檢索它的值,,并把它添加到頁面上,。

    處理JSON響應(yīng)信息比處理純文本或(X)HTML需要多一點(diǎn)技巧。下面是我們分析一個(gè)JSON文件的示例:

    { ''header'' : ''How to Handle the Ajax Response'',
    ''description'' : ''An in-depth explanation of how to handle the Ajax response.'',
    ''sourceUrl'' : ''http://www./clients/informit/AjaxResponse/AjaxResponse.zip''}

    數(shù)據(jù)被冒號(hào)(:)分成了兩個(gè)部分:標(biāo)簽名稱和值,。附加的數(shù)據(jù)被逗號(hào)(,)分成新的名稱/值對(duì)?,F(xiàn)在我們知道了JSON的樣子了,下面是我們分析它的方法:

    if(ajax.checkReadyState(''body'', ''loading...'', ''loading...'', ''loading...'') == "OK")
    {
     eval("var response = ("+ajax.request.responseText+")");
     document.getElementById(''body'').innerHTML = "" + response.header + "
    "
    + response.description + "

    "
    + "Download the source files";
    }

    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)。

    var response = ajax.request.responseXML.documentElement;

    下一步,,我們通過名稱獲取所有的元素并得到它們的值:

    var header = response.getElementsByTagName(''header'')[0].firstChild.data;
    var description = response.getElementsByTagName(''description'')[0].firstChild.data;
    var sourceUrl = response.getElementsByTagName(''sourceUrl'')[0].firstChild.data;

    最后,,我們把響應(yīng)信息顯示在相應(yīng)的div標(biāo)記中:

    document.getElementById(''body'').innerHTML = "" + header + "
    "
    + description + "

    "
    + "Download the source files";

    用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)



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多