亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

如何使用ajax開發web應用程序第1/2頁

2024-09-01 08:32:02
字體:
來源:轉載
供稿:網友

作者: Jonathan Fenocchi
時間:2005.10.25
譯者:Sheneyan
英文原文:

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

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

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

現在讓我們創建一個簡單的web頁面包含一些示例數據。這個頁面將是我們的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開發web應用程序 - 示例</title>
</head>
<body>
<h1>使用ajax開發web應用程序</h1>
<p>這個頁面演示了AJAX技術如何通過動態讀取一個遠程文件來更新一個網頁的內容--不需要任何網頁的重新加載。注意:這個例子對于禁止js的用戶來說沒有效果。</p>
<p>
這是一些示例數據,它是這個網頁的默認數據 <a href="data.xml"
</p>
</body>
</html>

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

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

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

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

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

接下來是這些代碼塊:

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

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

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

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

2 – 加載結束(XMLHttpRequest一從服務器上獲得一個回應)

3 – 交互(當XMLHttpRequest對象和服務器連接中)

4 – 結束(當XMLHttpRequest被告知它已經完成了所有人物并結束運行)

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

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

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

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

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

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

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

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

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

document.getElementById(obj).innerHTML = data

這就是全部了

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

關于作者

Jonathan Fenocchi(mail:jona#slightlyremarkable.com #換成@)是一個網絡開發者,主攻web設計,客戶端腳本,php腳本。
他的網站位于:

當前1/2頁 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91欧美视频网站| 国产精品久久久久久久天堂| 日韩成人小视频| 亚洲精品日韩在线| 欧美激情综合色| 俺去啦;欧美日韩| 国产精品流白浆视频| 中文字幕不卡在线视频极品| 欧美色道久久88综合亚洲精品| 欧美激情国产精品| 亚洲国产小视频| 日韩av网站在线| 欧美日韩性视频| 日本韩国欧美精品大片卡二| 欧美日韩亚洲一区二区三区| 国产精品激情av电影在线观看| 亚洲成**性毛茸茸| 久久久久久久久久久免费精品| 国产精品日日摸夜夜添夜夜av| 欧美激情综合色| 日韩天堂在线视频| 日韩精品视频免费在线观看| 日韩美女福利视频| 国内精品模特av私拍在线观看| 日韩中文字幕视频在线观看| 欧美日韩视频在线| 日韩av毛片网| 国产精品人成电影在线观看| 色综合天天综合网国产成人网| 亚洲石原莉奈一区二区在线观看| 久久久久亚洲精品国产| 亚洲香蕉av在线一区二区三区| 亚洲综合精品伊人久久| 国产一区二区三区在线免费观看| 这里精品视频免费| 成人黄色午夜影院| 国产精品 欧美在线| 欧美肥老妇视频| 欧美日韩在线观看视频| 国产亚洲成av人片在线观看桃| 成人免费高清完整版在线观看| 国内精品一区二区三区| 精品国产一区二区三区久久久狼| 亚洲国产精品成人va在线观看| 在线视频日本亚洲性| 久久国产精品电影| 国产精品69久久久久| 欧美最近摘花xxxx摘花| 亚洲激情在线视频| 欧美亚洲视频在线观看| 欧美精品成人91久久久久久久| 成人国产亚洲精品a区天堂华泰| 国产精品高潮呻吟久久av野狼| 国产成人拍精品视频午夜网站| 精品久久久久久中文字幕| 欧美大片免费观看在线观看网站推荐| 亚洲美女视频网| 久久国产天堂福利天堂| 国产三级精品网站| 亚洲一区二区三区毛片| 欧美激情亚洲激情| 国产精品入口夜色视频大尺度| 最近中文字幕mv在线一区二区三区四区| 亚洲精品电影网| 日韩电影中文 亚洲精品乱码| 5566成人精品视频免费| 亚洲欧洲偷拍精品| 国产精品高潮呻吟久久av无限| 国产91亚洲精品| 国产亚洲a∨片在线观看| 日本精品中文字幕| 日韩中文视频免费在线观看| 亚洲黄色成人网| 精品国产91久久久久久| 亚洲爱爱爱爱爱| 日韩精品中文字幕在线| 国产精品久久久亚洲| 亚洲夜晚福利在线观看| 日韩精品视频免费在线观看| 欧美极品美女视频网站在线观看免费| 亚洲国产精品久久久久久| 欧美成人精品在线| 色阁综合伊人av| 亚洲自拍偷拍色图| 97精品国产91久久久久久| 亚洲人永久免费| 亚洲国产欧美自拍| 国内精品400部情侣激情| 亚洲成人黄色在线| 亚洲第一页中文字幕| 91亚洲国产精品| 伊人久久久久久久久久| 欧美激情女人20p| 91国产美女在线观看| 日韩成人在线视频网站| 国产成人av在线播放| 久久久极品av| 午夜精品99久久免费| 欧美亚洲国产成人精品| xvideos亚洲人网站| 国产日韩精品电影| 91经典在线视频| 成人在线视频福利| 亚洲日本欧美中文幕| 91大神在线播放精品| 成人国产精品一区二区| 欧美色播在线播放| 亚洲女同性videos| 国产一区二区动漫| 亚洲精品网站在线播放gif| 在线亚洲午夜片av大片| 欧美激情网友自拍| 国产精品丝袜视频| 亚洲精品国产精品久久清纯直播| 中文字幕在线观看日韩| 国产高清视频一区三区| 亚洲专区中文字幕| 国产精品免费视频xxxx| 国产精品免费在线免费| 91美女高潮出水| 欧美丝袜一区二区| 欧美性xxxx极品hd欧美风情| 中文字幕视频一区二区在线有码| 日本不卡高字幕在线2019| 2019中文字幕在线| 日韩免费观看在线观看| 欧美专区在线视频| 亚洲成人a级网| 欧美老少配视频| 成人激情综合网| 上原亚衣av一区二区三区| 日韩欧美在线看| 国产精品夜色7777狼人| 色小说视频一区| 黑人精品xxx一区一二区| 久久亚洲精品网站| 日韩精品一二三四区| 色综合久久久888| 国产精品日韩在线| 国产精品男人的天堂| 国产欧美日韩中文字幕在线| 亚洲欧美激情视频| 日本久久久久久久| 91精品国产综合久久香蕉的用户体验| 性色av一区二区三区在线观看| 亚洲3p在线观看| 91国偷自产一区二区三区的观看方式| 不卡av电影在线观看| 久久天天躁夜夜躁狠狠躁2022| 亚洲欧美日韩中文视频| 91精品视频免费观看| 北条麻妃一区二区在线观看| 欧美国产中文字幕| 亚洲激情中文字幕| 久久久精品中文字幕| 中文字幕在线成人| 日韩美女视频免费在线观看| 97色在线视频观看| 色哟哟入口国产精品| 伊人久久久久久久久久久久久| 久久久久久噜噜噜久久久精品| 欧美精品激情在线观看| 国产成人av在线| 日韩av在线网页|