中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡(luò)編程 > 如何使用ajax開發(fā)web應(yīng)用程序
用MVC模型引導(dǎo)你的WEB設(shè)計思路 回到列表 asp編譯成dll-圖形化教程
 如何使用ajax開發(fā)web應(yīng)用程序

作者:Sheneyan 時間: 2006-02-07 文檔類型:翻譯 來自:藍色理想

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

作者: Jonathan Fenocchi
時間: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)的趨向。在過去的幾個月里,一個過去并不被廣泛支持的技術(shù)已經(jīng)被越來越多的web沖浪者(web surfers??是指瀏覽器還是瀏覽者?)所接受,它給了開發(fā)者更多的自由開發(fā)先進的web應(yīng)用程序。這些通過javascript來異步取得xml數(shù)據(jù)的應(yīng)用程序,被親切的稱為“Ajax應(yīng)用程序”(Asynchronous Javascript and XML applications)。在這篇文章中,我將會解釋如何通過Ajax來取回一個遠程的XML文件并更新一個web page,并且隨著這個系列的繼續(xù),我將討論更多的方法,使用ajax技術(shù)將你的web應(yīng)用程序提升到一個新的層次.

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

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

現(xiàn)在讓我們創(chuàng)建一個簡單的web頁面包含一些示例數(shù)據(jù)。這個頁面將是我們的js腳本所在,并且這個頁面將會讓用戶們訪問柄看到Ajax腳本的運行。我們把它命名為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>這個頁面演示了AJAX技術(shù)如何通過動態(tài)讀取一個遠程文件來更新一個網(wǎng)頁的內(nèi)容--不需要任何網(wǎng)頁的重新加載。注意:這個例子對于禁止js的用戶來說沒有效果。</p>
    <p id="xmlObj">
    這是一些示例數(shù)據(jù),它是這個網(wǎng)頁的默認數(shù)據(jù) <a href="data.xml"
    title="查看這個XML數(shù)據(jù)." onclick="ajaxRead('data.xml'); this.style.display='none'; return false">查看XML數(shù)據(jù).</a>
    </p>
  </body>
</html>

注意,對于那些沒有javascript的用戶,我們直接鏈接到data.xml文件。對于那些允許運行javascript的用戶,函數(shù)“ajaxRead”將被運行,這個鏈接被隱藏,并不會被轉(zhuǎn)向到那個data.xml文件。函數(shù)“ajaxRead”現(xiàn)在還沒定義。所以如果你要檢驗上面的示例代碼,你會得到一個javascript錯誤。讓我們繼續(xù)并定義這個函數(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>

(Sheneyan注:完整代碼示例見 example.html ML文件見:data.xml )

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

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

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

接下來是這些代碼塊:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

document.getElementById(obj).innerHTML = data

這就是全部了

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

關(guān)于作者

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

出處:藍色理想
責(zé)任編輯:moby

上一頁 下一頁 如何使用ajax開發(fā)web應(yīng)用程序 [2]

◎進入論壇網(wǎng)絡(luò)編程版塊參加討論

相關(guān)文章 更多相關(guān)鏈接
淺談flash web的結(jié)構(gòu)
設(shè)計五原則
Web 表單設(shè)計原則和實踐
關(guān)于中英文正文字體比較
網(wǎng)站程序員如何應(yīng)對web標(biāo)準(zhǔn)
作者文章 更多作者文章
客戶端模版的應(yīng)用
[js效果] 圖片加載進度實時顯示
javascript的函數(shù)
ajax的缺點
用Google Sitemaps幫助你SEO
關(guān)鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設(shè)計比賽 網(wǎng)頁制作 web標(biāo)準(zhǔn) 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大!熬•自然”設(shè)計大賽開啟
國際體驗設(shè)計大會7月將在京舉行
中國國防科技信息中心標(biāo)志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機會
阿里行云
云手機年終巨獻,送禮標(biāo)配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設(shè)計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標(biāo)
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:1/41個記錄/頁 轉(zhuǎn)到 頁 共4個記錄

藍色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準(zhǔn)打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設(shè)計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關(guān)的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關(guān)法律法規(guī)
·承擔(dān)一切因您的行為而直接或間接導(dǎo)致的民事或刑事法律責(zé)任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設(shè)計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設(shè)計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2