<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sunspl

    Hello,everyone,i am sun. 天道酬勤,笨鳥(niǎo)先飛.
    隨筆 - 47, 文章 - 0, 評(píng)論 - 24, 引用 - 0
    數(shù)據(jù)加載中……

    AJAX基礎(chǔ)教程

    什么是 AJAX?

      AJAX (異步 JavaScript 和 XML) 是個(gè)新產(chǎn)生的術(shù)語(yǔ),專(zhuān)為描述JavaScript的兩項(xiàng)強(qiáng)大性能.這兩項(xiàng)性能在多年來(lái)一直被網(wǎng)絡(luò)開(kāi)發(fā)者所忽略,直到最近Gmail, Google suggest和google Maps的橫空出世才使人們開(kāi)始意識(shí)到其重要性.

      這兩項(xiàng)被忽視的性能是:

    ???  * 無(wú)需重新裝載整個(gè)頁(yè)面便能向服務(wù)器發(fā)送請(qǐng)求.
    ???  * 對(duì)XML文檔的解析和處理.

      步驟 1 – "請(qǐng)!" --- 如何發(fā)送一個(gè)HTTP請(qǐng)求

      為了用JavaScript向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求, 需要一個(gè)具備這種功能的類(lèi)實(shí)例.

    這樣的類(lèi)首先由Internet Explorer以ActiveX對(duì)象引入, 被稱(chēng)為XMLHTTP. 后來(lái)Mozilla, Safari 和其他

    瀏覽器紛紛仿效, 提供了XMLHttpRequest類(lèi),它支持微軟的ActiveX對(duì)象所提供的方法和屬性.

      因此, 為了創(chuàng)建一個(gè)跨瀏覽器的這樣的類(lèi)實(shí)例(對(duì)象), 可以應(yīng)用如下代碼:

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    ??? http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
    ??? http_request = new ActiveXObject("Microsoft.XMLHTTP");
    }

      (上例對(duì)代碼做了一定簡(jiǎn)化,這是為了解釋如何創(chuàng)建XMLHTTP類(lèi)實(shí)例.

    實(shí)際的代碼實(shí)例可參閱本篇步驟3.)

      如果服務(wù)器的響應(yīng)沒(méi)有XML mime-type header,某些Mozilla瀏覽器可能無(wú)法正常工作. 為了解決這個(gè)

    問(wèn)題, 如果服務(wù)器響應(yīng)的header不是text/xml,可以調(diào)用其它方法修改該header.

    http_request = new XMLHttpRequest();
    http_request.overrideMimeType('text/xml');

      接下來(lái)要決定當(dāng)收到服務(wù)器的響應(yīng)后,需要做什么.這需要告訴HTTP請(qǐng)求對(duì)象用哪一個(gè)JavaScript函數(shù)

    處理這個(gè)響應(yīng).可以將對(duì)象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:

    http_request.onreadystatechange = nameOfTheFunction;

      注意:在函數(shù)名后沒(méi)有括號(hào),也無(wú)需傳遞參數(shù).另外還有一種方法,可以在扉頁(yè)(fly)中定義函數(shù)及其對(duì)

    響應(yīng)要采取的行為,如下所示:

    http_request.onreadystatechange = function(){
    ??? // do the thing
    };

      在定義了如何處理響應(yīng)后,就要發(fā)送請(qǐng)求了.可以調(diào)用HTTP請(qǐng)求類(lèi)的open()和send()方法, 如下所示:

    http_request.open('GET', 'http://www.example.org/some.file', true);
    http_request.send(null);

    ???  * open()的第一個(gè)參數(shù)是HTTP請(qǐng)求方式 – GET, POST, HEAD 或任何服務(wù)器所支持的您想調(diào)用的方式

    . 按照HTTP規(guī)范,該參數(shù)要大寫(xiě);否則,某些瀏覽器(如Firefox)可能無(wú)法處理請(qǐng)求.有關(guān)HTTP請(qǐng)求方法的詳

    細(xì)信息可參考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs
    ???  * 第二個(gè)參數(shù)是請(qǐng)求頁(yè)面的URL.由于自身安全特性的限制,該頁(yè)面不能為第三方域名的頁(yè)面.同時(shí)一定

    要保證在所有的頁(yè)面中都使用準(zhǔn)確的域名,否則調(diào)用open()會(huì)得到"permission denied"的錯(cuò)誤提示.一個(gè)

    常見(jiàn)的錯(cuò)誤是訪問(wèn)站點(diǎn)時(shí)使用domain.tld,而當(dāng)請(qǐng)求頁(yè)面時(shí),卻使用www.domain.tld.
    ???  * 第三個(gè)參數(shù)設(shè)置請(qǐng)求是否為異步模式.如果是TRUE, JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響

    應(yīng).這就是"AJAX"中的"A".

      如果第一個(gè)參數(shù)是"POST",send()方法的參數(shù)可以是任何想送給服務(wù)器的數(shù)據(jù). 這時(shí)數(shù)據(jù)要以字符串

    的形式送給服務(wù)器,如下所示:

    name=value&anothername=othervalue&so=on

      步驟 2 – "收到!" --- 處理服務(wù)器的響應(yīng)

      當(dāng)發(fā)送請(qǐng)求時(shí),要提供指定處理響應(yīng)的JavaScript函數(shù)名.

    http_request.onreadystatechange = nameOfTheFunction;

      我們來(lái)看看這個(gè)函數(shù)的功能是什么.首先函數(shù)會(huì)檢查請(qǐng)求的狀態(tài).如果狀態(tài)值是4,就意味著一個(gè)完整的

    服務(wù)器響應(yīng)已經(jīng)收到了,您將可以處理該響應(yīng).

    if (http_request.readyState == 4) {
    ??? // everything is good, the response is received
    } else {
    ??? // still not ready
    }

      readyState的取值如下:

    ??? * 0 (未初始化)
    ??? * 1 (正在裝載)
    ??? * 2 (裝載完畢)
    ??? * 3 (交互中)
    ??? * 4 (完成)

    (Source)

      接著,函數(shù)會(huì)檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值. 完整的狀態(tài)取值可參見(jiàn) W3C site. 我們著重看值為200

    OK的響應(yīng).

    if (http_request.status == 200) {
    ??? // perfect!
    } else {
    ??? // there was a problem with the request,
    ??? // for example the response may be a 404 (Not Found)
    ??? // or 500 (Internal Server Error) response codes
    }

      在檢查完請(qǐng)求的狀態(tài)值和響應(yīng)的HTTP狀態(tài)值后, 您就可以處理從服務(wù)器得到的數(shù)據(jù)了.有兩種方式可

    以得到這些數(shù)據(jù):

    ??? * http_request.responseText – 以文本字符串的方式返回服務(wù)器的響應(yīng)
    ??? * http_request.responseXML –

    以XMLDocument對(duì)象方式返回響應(yīng).處理XMLDocument對(duì)象可以用JavaScript DOM函數(shù)

      步驟 3 – "萬(wàn)事俱備!" - 簡(jiǎn)單實(shí)例

      我們現(xiàn)在將整個(gè)過(guò)程完整地做一次,發(fā)送一個(gè)簡(jiǎn)單的HTTP請(qǐng)求. 我們用JavaScript請(qǐng)求一個(gè)HTML文件,

    test.html, 文件的文本內(nèi)容為"I'm a test.".然后我們"alert()"test.html文件的內(nèi)容.



    ??? style="cursor: pointer; text-decoration: underline"
    ??? onclick="makeRequest('test.html')">
    ??????? Make a request


      本例中:

    ??? * 用戶(hù)點(diǎn)擊瀏覽器上的"請(qǐng)求"鏈接;
    ??? * 接著函數(shù)makeRequest()將被調(diào)用.其參數(shù) – HTML文件test.html在同一目錄下;
    ??? * 這樣就發(fā)起了一個(gè)請(qǐng)求.onreadystatechange的執(zhí)行結(jié)果會(huì)被傳送給alertContents();
    ??? * alertContents()將檢查服務(wù)器的響應(yīng)是否成功地收到,如果是,就會(huì)"alert()"test.html文件的內(nèi)

    容.

      步驟 4 – "X-文檔" --- 處理XML響應(yīng)

      在前面的例子中,當(dāng)服務(wù)器對(duì)HTTP請(qǐng)求的響應(yīng)被收到后,我們會(huì)調(diào)用請(qǐng)求對(duì)象的reponseText屬性.該屬

    性包含了test.html文件的內(nèi)容.現(xiàn)在我們來(lái)試試responseXML屬性.

      首先,我們新建一個(gè)有效的XML文件,后面我們將使用這個(gè)文件.該文件(test.xml)源代碼如下所示:



    ??? I'm a test.


      在該腳本中,我們只需修改請(qǐng)求部分:

    ...
    onclick="makeRequest('test.xml')">
    ...

      接著,在alertContents()中,我們將alert()的代碼alert(http_request.responseText);換成:

    var xmldoc = http_request.responseXML;
    var root_node = xmldoc.getElementsByTagName('root').item(0);
    alert(root_node.firstChild.data);

      這里,我們使用了responseXML提供的XMLDocument對(duì)象并用DOM方法獲取存于XML文件中的內(nèi)容.

    posted on 2007-01-02 16:59 JavaSuns 閱讀(273) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 在线视频亚洲一区| 国内精品久久久久影院亚洲| 4虎永免费最新永久免费地址| 久久亚洲高清综合| 国产成人无码精品久久久久免费| 四虎国产精品免费视| 污污的视频在线免费观看| 免费a级毛片无码a∨性按摩| 黄色免费网址大全| 国产AV无码专区亚洲AV手机麻豆 | 亚洲自偷自偷偷色无码中文| h片在线播放免费高清| 亚洲乱码国产乱码精品精| 久久精品一区二区免费看| 久久狠狠高潮亚洲精品| 日本在线高清免费爱做网站| 亚洲精品无码久久久久YW| 免费成人黄色大片| a级毛片免费在线观看| 亚洲第一精品电影网| 免费看大美女大黄大色| 老司机福利在线免费观看| 亚洲日本va在线视频观看| 久久免费的精品国产V∧| 天天爽亚洲中文字幕| 亚洲 另类 无码 在线| 国产精品偷伦视频观看免费 | 亚洲人成在线精品| 国产一区二区三区在线免费观看| 一区二区三区免费视频播放器| 亚洲国产另类久久久精品黑人| free哆啪啪免费永久| 国产成人亚洲精品青草天美| 国产成人精品免费午夜app| 久久精品国产亚洲AV电影网| 亚洲精品成人片在线观看精品字幕| 99re6热视频精品免费观看 | 久久亚洲精品无码AV红樱桃| 免费高清av一区二区三区| 99免费在线视频| 亚洲人成欧美中文字幕|