• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

    如何使用ajax開發(fā)web應(yīng)用程序第1/2頁

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:52:49
    文檔

    如何使用ajax開發(fā)web應(yīng)用程序第1/2頁

    如何使用ajax開發(fā)web應(yīng)用程序第1/2頁:作者: Jonathan Fenocchi時(shí)間:2005.10.25譯者:Sheneyan英文原文:http://webreference.com/programming/javascript/jf/column12/index.html 在過去,由于為了獲得新數(shù)據(jù)而不得不重新加載web頁面(或者加載其他頁面)導(dǎo)致web應(yīng)用程序發(fā)展被限制。雖然
    推薦度:
    導(dǎo)讀如何使用ajax開發(fā)web應(yīng)用程序第1/2頁:作者: Jonathan Fenocchi時(shí)間:2005.10.25譯者:Sheneyan英文原文:http://webreference.com/programming/javascript/jf/column12/index.html 在過去,由于為了獲得新數(shù)據(jù)而不得不重新加載web頁面(或者加載其他頁面)導(dǎo)致web應(yīng)用程序發(fā)展被限制。雖然

    作者: Jonathan Fenocchi
    時(shí)間:2005.10.25
    譯者:Sheneyan
    英文原文:
    http://webreference.com/programming/javascript/jf/column12/index.html

    在過去,由于為了獲得新數(shù)據(jù)而不得不重新加載web頁面(或者加載其他頁面)導(dǎo)致web應(yīng)用程序發(fā)展被限制。雖然有其他方法可用(不加載其他頁面),但是這些技術(shù)都沒有被很好地支持而且有bug成災(zāi)的趨向。在過去的幾個(gè)月里,一個(gè)過去并不被廣泛支持的技術(shù)已經(jīng)被越來越多的web沖浪者(web surfers??是指瀏覽器還是瀏覽者?)所接受,它給了開發(fā)者更多的自由開發(fā)先進(jìn)的web應(yīng)用程序。這些通過javascript來異步取得xml數(shù)據(jù)的應(yīng)用程序,被親切的稱為“Ajax應(yīng)用程序”(Asynchronous Javascript and XML applications)。在這篇文章中,我將會(huì)解釋如何通過Ajax來取回一個(gè)遠(yuǎn)程的XML文件并更新一個(gè)web page,并且隨著這個(gè)系列的繼續(xù),我將討論更多的方法,使用ajax技術(shù)將你的web應(yīng)用程序提升到一個(gè)新的層次.

    這第一步就是創(chuàng)建一個(gè)帶一些數(shù)據(jù)的XML文件。我們將這個(gè)文件命名為data.xml。它是一個(gè)簡單的XML文件,而在一個(gè)真實(shí)的程序中,它會(huì)復(fù)雜許多,但對(duì)于我們的例子來說,簡單明了是最合適地。

    <?xml version="1.0" encoding="UTF-8"?> <root> <data> 這是一些示例數(shù)據(jù),它被保存在一個(gè)XML文件中,并被JavaScript取回。 </data> </root>

    現(xiàn)在讓我們創(chuàng)建一個(gè)簡單的web頁面包含一些示例數(shù)據(jù)。這個(gè)頁面將是我們的js腳本所在,并且這個(gè)頁面將會(huì)讓用戶們?cè)L問柄看到Ajax腳本的運(yùn)行。我們把它命名為ajax.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
      "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="zh" dir="ltr">
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>使用ajax開發(fā)web應(yīng)用程序 - 示例</title>
      </head>
      <body>
        <h1>使用ajax開發(fā)web應(yīng)用程序</h1>
        <p>這個(gè)頁面演示了AJAX技術(shù)如何通過動(dòng)態(tài)讀取一個(gè)遠(yuǎn)程文件來更新一個(gè)網(wǎng)頁的內(nèi)容--不需要任何網(wǎng)頁的重新加載。注意:這個(gè)例子對(duì)于禁止js的用戶來說沒有效果。</p>
        <p id="xmlObj">
        這是一些示例數(shù)據(jù),它是這個(gè)網(wǎng)頁的默認(rèn)數(shù)據(jù) <a href="data.xml"
        title="查看這個(gè)XML數(shù)據(jù)." onclick="ajaxRead('data.xml'); this.style.display='none'; return false">查看XML數(shù)據(jù).</a>
        </p>
      </body>
    </html>

    注意,對(duì)于那些沒有javascript的用戶,我們直接鏈接到data.xml文件。對(duì)于那些允許運(yùn)行javascript的用戶,函數(shù)“ajaxRead”將被運(yùn)行,這個(gè)鏈接被隱藏,并不會(huì)被轉(zhuǎn)向到那個(gè)data.xml文件。函數(shù)“ajaxRead”現(xiàn)在還沒定義。所以如果你要檢驗(yàn)上面的示例代碼,你會(huì)得到一個(gè)javascript錯(cuò)誤。讓我們繼續(xù)并定義這個(gè)函數(shù)(還有其他的),讓你能夠看到ajax是如何工作的,下面的腳本要放到你的head標(biāo)簽里:

    <script type="text/javascript"><!--
    function ajaxRead(file){
      var xmlObj = null;
      if(window.XMLHttpRequest){
          xmlObj = new XMLHttpRequest();
      } else if(window.ActiveXObject){
          xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
          return;
      }
      xmlObj.onreadystatechange = function(){
        if(xmlObj.readyState == 4){
           updateObj('xmlObj', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
         }
        }
        xmlObj.open ('GET', file, true);
        xmlObj.send ('');
      }
      function updateObj(obj, data){
       document.getElementById(obj).firstChild.data = data;
      }
      //--></script>

    這堆代碼有點(diǎn)多,讓我們一點(diǎn)點(diǎn)的進(jìn)行。第一個(gè)函數(shù)叫做“ajaxRead”-也就是我們?cè)陧撁娴摹安榭碭ML數(shù)據(jù)”鏈接中調(diào)用的函數(shù),我們定義了一個(gè)“xmlObj”變量-這將作為客戶端(用戶正在查看的這個(gè)web頁面)以及服務(wù)端(web站點(diǎn)本身)之間的中間件。我們?cè)谝粋€(gè)if/else塊中定義這個(gè)對(duì)象:

    if(window.XMLHttpRequest){
       xmlObj = new XMLHttpRequest();
    } else if(window.ActiveXObject){
       xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
       return;
    }

    這只是一個(gè)對(duì)不同對(duì)象是否可用的測試-某些瀏覽器實(shí)現(xiàn)了不同的XMLHttpRequest對(duì)象,所以當(dāng)我們定義“xmlObj”作為我們的XMLHttpRequest對(duì)象時(shí),我們不得不根據(jù)瀏覽器所實(shí)現(xiàn)的來定義它。如果沒有可用的XMLHttpRequest對(duì)象,我們將執(zhí)行“return”語句結(jié)束這個(gè)函數(shù)以避免腳本錯(cuò)誤。在大部分情況下,這個(gè)檢驗(yàn)將返回一個(gè)XMLHttpRequest對(duì)象-這部分代碼應(yīng)該能夠在絕大部分的瀏覽器上工作,除了少部分比較老的瀏覽器的異常情況(它能夠工作在ie5.01上,但是在netscape4上會(huì)使函數(shù)終止)。

    接下來是這些代碼塊:

    xmlObj.onreadystatechange = function(){
      if(xmlObj.readyState == 4){
          updateObj('xmlObj', xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data);
      }
    }

    每次XMLHttpRequest的狀態(tài)發(fā)生變化,事件“onreadystatechange”就會(huì)被觸發(fā)。通過使用“xmlObj.onreadystatechange = function(){...}”我們能夠創(chuàng)建一個(gè)函數(shù)并讓它在這個(gè)XMLHttpRequest對(duì)象的狀態(tài)每次發(fā)生改變的時(shí)候立刻運(yùn)行。這里總共有五個(gè)狀態(tài),由0走到4。

    0 – 尚未初始化(在這個(gè)XMLHttpRequest開始前)

    1 – 加載(XMLHttpRequest初始化一結(jié)束)

    2 – 加載結(jié)束(XMLHttpRequest一從服務(wù)器上獲得一個(gè)回應(yīng))

    3 – 交互(當(dāng)XMLHttpRequest對(duì)象和服務(wù)器連接中)

    4 – 結(jié)束(當(dāng)XMLHttpRequest被告知它已經(jīng)完成了所有人物并結(jié)束運(yùn)行)

    這第五個(gè)狀態(tài)(數(shù)字4)就是我們能夠確定數(shù)據(jù)已經(jīng)可用的標(biāo)志,所以我們檢驗(yàn)這個(gè)xmlObj.readyState是否等于“4”來確定數(shù)據(jù)是否可用,如果是4,我們運(yùn)行updateObj函數(shù)。這個(gè)函數(shù)帶兩個(gè)參數(shù):一個(gè)當(dāng)前web頁面的元素ID(當(dāng)前web頁面中要更新的元素)以及用于填充這個(gè)元素的數(shù)據(jù)。這個(gè)函數(shù)的運(yùn)行方式在稍后將更詳細(xì)地解釋。

    我們的web頁面的p元素有一個(gè)id“xmlData”,這就是我們準(zhǔn)備更新的段落。我們正在取得的數(shù)據(jù)來自于XML文件,但它有點(diǎn)復(fù)雜。這里是它如何工作的原理。

    xmlObj.responseXML屬性是一個(gè)DOM對(duì)象 - 它很象“document”對(duì)象,除了它來自遠(yuǎn)程的XML文件。換句話說,如果你在data.xml中運(yùn)行腳本,那xmlObj.responseXML就是一個(gè)“document”對(duì)象。因?yàn)槲覀冎肋@些,我們能夠通過“getElementsByTagName”方法取得任何XML節(jié)點(diǎn)。數(shù)據(jù)包含在一個(gè)命名為“<data>”的XML節(jié)點(diǎn)中,所以我們的任務(wù)很簡單:取得第一個(gè)(而且只有這一個(gè))數(shù)據(jù)節(jié)點(diǎn)。因而,xmlObject.responseXML.getElementsByTagName("data")[0]返回XML文件中的第一個(gè)<data>節(jié)點(diǎn)。
    注意:它返回的是XML節(jié)點(diǎn),而不是節(jié)點(diǎn)中的數(shù)據(jù)-這個(gè)數(shù)據(jù)必須通過訪問XML節(jié)點(diǎn)的屬性取得,這就是下一步要說的。

    接下來,取得數(shù)據(jù)只需要簡單的指定“firstChild.data”(firstChild指向了那個(gè)被<data>節(jié)點(diǎn)包含的文本節(jié)點(diǎn),而這個(gè)“data”屬性則是這個(gè)文本節(jié)點(diǎn)的實(shí)際文本)。

    xmlObj.open ('GET', file, true);
    xmlObj.send ('');

    這是我們的ajaxRead函數(shù)的最后一個(gè)部分。它說了些什么?嗯,xmlObj的這個(gè)“open”方法打開了一個(gè)到服務(wù)器(通過一個(gè)指定的協(xié)議,這里指定的是“GET”-你可以使用“USE”或者其他別的協(xié)議)的連接,去請(qǐng)求一個(gè)文件(在我們的例子里,變量“file”被作為一個(gè)參數(shù)賦給ajaxRead函數(shù)-data.xml),而且javascript可以同步(false)或者異步(true,默認(rèn)值)的處理請(qǐng)求。由于這是異步的Javascript和XML(AJAX),我們將使用默認(rèn)的異步方式-在這個(gè)例子中,使用同步方式將不起作用。

    這是我們函數(shù)中的最后一行,它簡單的發(fā)送一個(gè)空字符串回服務(wù)器。如果沒有這行,xmlObj的readyState永遠(yuǎn)不會(huì)到4,所以你的頁面永遠(yuǎn)不會(huì)更新。這個(gè)send方法能夠用于作其他事情,但今天我只是用來從服務(wù)器上取得數(shù)據(jù)-并不發(fā)送它-所以在這篇文章中我不準(zhǔn)備介入任何關(guān)于send方法的細(xì)節(jié)。

    function updateObj(obj, data){
      document.getElementById(obj).firstChild.data = data;
    }

    現(xiàn)在再稍微解釋一下updateObj函數(shù):這個(gè)函數(shù)使用一個(gè)新的值來更新當(dāng)前頁面上任何指定的元素。他的第一個(gè)參數(shù),“obj”是當(dāng)前頁面中元素的ID-那個(gè)要被更新的對(duì)象;它的第二個(gè)參數(shù),“data”是用來將那個(gè)將被替換值的對(duì)象(“obj”)的內(nèi)容替換掉。一般來說,檢驗(yàn)一下并確定當(dāng)前頁面上確實(shí)有一個(gè)元素的ID是“obj”是比較明智的,但對(duì)我們的腳本的這個(gè)隔離級(jí)別來說校驗(yàn)并不必要。這個(gè)函數(shù)更新的方式和我們之前從XML文件的“data”節(jié)點(diǎn)取得數(shù)據(jù)的方式類似-它定位它要更新的元素(這時(shí)候這個(gè)元素的ID代替了它的標(biāo)簽名和在頁面中的索引)并設(shè)置這個(gè)元素的第一個(gè)子節(jié)點(diǎn)(文本節(jié)點(diǎn))的data屬性為新的值。如果你需要使用HTML而不是純文本來更新一個(gè)元素,你也可以使用

    document.getElementById(obj).innerHTML = data

    這就是全部了

    這個(gè)概念很簡單,而且代碼也不是很難。你能夠從某個(gè)地方讀取一個(gè)文件并且不需要重新加載這個(gè)web頁面。你有足夠的靈活性來作各種事情,包括從表單發(fā)送數(shù)據(jù)(不需要重新加載web頁面)并且使用一個(gè)服務(wù)端語言來動(dòng)態(tài)生成XML文件。如果你需要更近一步,記得這個(gè)連接是很有用的-哦,還要記得Google是你朋友。在另外的文章中,我將解釋你如何配合服務(wù)端技術(shù)使用AJAX來構(gòu)造強(qiáng)大的web應(yīng)用程序。

    關(guān)于作者

    Jonathan Fenocchi(mail:jona#slightlyremarkable.com #換成@)是一個(gè)網(wǎng)絡(luò)開發(fā)者,主攻web設(shè)計(jì),客戶端腳本,php腳本。
    他的網(wǎng)站位于:http://www.slightlyremarkable.com
    12下一頁閱讀全文

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    如何使用ajax開發(fā)web應(yīng)用程序第1/2頁

    如何使用ajax開發(fā)web應(yīng)用程序第1/2頁:作者: Jonathan Fenocchi時(shí)間:2005.10.25譯者:Sheneyan英文原文:http://webreference.com/programming/javascript/jf/column12/index.html 在過去,由于為了獲得新數(shù)據(jù)而不得不重新加載web頁面(或者加載其他頁面)導(dǎo)致web應(yīng)用程序發(fā)展被限制。雖然
    推薦度:
    標(biāo)簽: 開發(fā) web ajax
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品一区二区久久精品| 国产精品亚洲w码日韩中文| 99精品国产在热久久| 四虎精品影库4HUTV四虎| 久久精品国产91久久综合麻豆自制| 亚洲国产精品成人| 精品福利一区二区三区精品国产第一国产综合精品 | 国产精品人成在线播放新网站 | 99免费精品国产| 国产精品无码a∨精品| 亚洲欧洲精品成人久久奇米网| 国产精品午夜久久| 亚洲精品高清视频| 久久精品成人免费网站| 国产精品女同久久久久电影院| 无码人妻精品中文字幕免费| 婷婷成人国产精品| 久久精品无码一区二区日韩AV| 国产激情精品一区二区三区| 久久精品九九亚洲精品天堂| 99精品热这里只有精品| 国产精品伦一区二区三级视频| 欧美性videos高清精品| 四虎成人精品无码| 无码人妻精品一区二区三区久久久| 亚洲午夜精品一级在线播放放 | 97久视频精品视频在线老司机| 97久久超碰成人精品网站| 国产精品免费大片| 91麻豆精品国产| 国产精品一二三区| 国产在线精品一区二区不卡| 国产成人精品男人的天堂538 | 亚洲精品亚洲人成在线观看下载| 亚洲精品天堂成人片?V在线播放| 日韩三级精品| 亚洲精品国精品久久99热一| 亚洲精品无码久久久久去q| 在线观看自拍少妇精品| 亚洲国产精品无码久久久不卡 | 国产精品户外野外|