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

首頁 > 開發 > AJAX > 正文

使用AJAX技術構建更優秀的Web應用程序

2024-07-21 02:28:43
字體:
來源:轉載
供稿:網友

  一、 簡介

  異步javascript+xml(即ajax),是一種創建交互式web應用程序的技術。這種程序使用javascript和xml從客戶端提交服務器請求,且整個過程中僅需要交換少量的數據而不必提交整個web頁面。因此,這樣的程序將更快和更具響應性,并將成為新一代客戶機-服務器系統的重要基礎技術之一。你可以在站點http://www.google.com/webhp?complete=1&hl=en處看到一種良好的ajax實踐技術展示。在此頁面中,如果你把任何字母輸入到文本框內,那么隨后就會出現一個下拉列表框,其中的內容直接來自于服務器而不必提交整個頁面。ajax的核心是xmlhttprequest對象??蛻舳四軌蛟诤笈_檢索并直接提交xml數據。為了把檢索的xml數據轉換成可生成的html內容,需要依賴于客戶端文檔對象模型(dom)讀取xml文檔結點樹并且組成用戶看得見的html元素。其實,ajax并非象html,dhtml等一樣的單一技術,它結合了不同的技術:

  ·xmlhttprequest對象被使用于與web服務器異步地交換數據。

  ·xml被普遍用作把數據傳輸回服務器的格式(盡管任何格式都能使用,例如普通文本,html等)。

  ·如果使用xml作為轉換格式,那么dom通常與如javascript這樣的客戶端腳本語言一起使用來動態地顯示和描述交互信息。

  ·xhtml(或html),css用于標記和信息格式化。

  二、 xmlhttprequest對象

  從歷史來看,是微軟首先在其internet explorer 5 for windows中以一個activex對象形式實現了xmlhttprequest對象。隨后,由mozilla工程的工程師實現了mozilla 1.0(和netscape 7)的一種兼容的本機版本;而稍后,蘋果公司在其safari 1.2上也實現了相同的工作。其實,在w3c標準的文檔對象模型(dom)level 3加載與存儲規范中,也提到了類似的功能?,F在,它成為一種事實上的標準,并開始在以后發行的大多數瀏覽器中得到實現。

  (一) 創建對象

  xmlhttprequest對象的創建方式因瀏覽器不同而有所不同。對于safari和mozilla來說,其創建方式如下所示:

var req = new xmlhttprequest();

  對于internet explorer 5.0+(指5.0及更高版本),則要把對象名傳遞到activex構造函數中:

var req = new activexobject("microsoft.xmlhttp");

  該對象的方法控制所有的操作,而其屬性存儲從服務器返回的各種數據片斷,例如xmlhttpobject.responsetext包含從服務器返回的xml或字符串值。

  (二) 方法

  在windows ie 5.0+、safari 1.2和mozila中支持的xmlhttprequest對象的方法列舉如下:

方法描述
abort() 取消當前的請求。如果你在一個不處理請求(readystate 0或4)的對象上調用它,"神秘的事情"發生了。
getresponseheader("headerlabel") 返回單個頭標簽的字符串值
getallresponseheaders()以一個串形式返回完整的頭(標簽和值)集合
open("method","url"[,asyncflag[, "username"[,"password"]]]) 指派目標url、方法及一個懸掛請求的其它可選屬性
send(content)傳輸請求。(可選擇地)其中可以加入可寄送的字符串或dom對象數據
setrequestheader("label","value") 把一個標簽/值對指派給要發送的請求中的頭部

  在上面的方法中,open和send方法是最重要的。下面,讓我們首先從應用程序的觀點來討論open方法。

var req;
………………………
req = new activexobject("microsoft.xmlhttp");
……………
var url="ajaxserver.aspx?pubid="+id;
……………
//打開一個到url的get請求
req.open("get",url,true);
//實際發送一個空請求
req.send(null);

  注意

  在這個示例應用程序中,ajaxclient.aspx頁面是用戶接口,ajaxserver.aspx則負責提供每一個用戶請求時的數據。要特別注意的是,ajaxserver.aspx頁面不應該包含任何html。你可以測試一下如果頁面包含html將會發生什么。

  open方法的第一個參數(見上面表格中的open函數)指示當前操作為一個get操作或是post操作。在進行簡單的數據檢索時,一般使用get。當向外傳輸的數據包大于512字節且操作包括服務器端活動(如插入,更新等)時,一般使用post。接下來,我們看一下"url"參數。這個參數可以是一個完整的url也可以是一個相對url。在上面例子中,使用的是相對的url。"asyncflag"參數指示在執行send方法后是否立即處理到來的腳本(這意味著不必等待是否有響應)。最后兩個參數分別是"username"和"password",如果"url"中提供這些數據的話。

  另一個重要的方法是send方法,它實際上使用一個消息體發送請求。對于本例而言,它只是發送一個空請求。

[
//實際發送一個空請求
req.send(null);
]

  (三) 屬性

屬性描述
onreadystatechange每當狀態改變時激發的事件的事件處理器。其中,readystate對象狀態整數含義如下:0=uninitialized1=loading2=loaded3=interactive4=complete
responsetext經服務器處理后返回的數據的字符串版本
responsexml經服務器處理后返回的dom兼容的數據文檔對象
status由服務器返回的數字代碼,例如404代表"not found",200代表"ok"
statustext伴隨著狀態代碼的字符串信息

  在此,應用程序中使用了onreadystatechange:

//這是事件處理器機制;在本例中,"requestprocessor"即是事件處理器。
req.onreadystatechange=requestprocessor;

  對于這個應用程序來說,"requestprocessor"是客戶端的事件處理器?,F在,在事件處理器內,使用readystate屬性來獲得各種狀態。值4顯示已經完成某種處理?,F在,在處理結果前,你應該檢查狀態或statustext以決定操作成功與否。在這個應用程序中,我是以下面方式實現的:

function requestprocessor()
{
 //如果readystate處理"ready"狀態
 if(req.readystate == 4)
 {
  //返回的狀態代碼200意味著一切順利
  if(req.status == 200)
  {
   //如果responsetext不空
   //req.responsetext實際上是一個由ajaxserver.aspx的"response.write("" + sbxml.tostring() + "");"方法編寫的字符串
   if(req.responsetext != "")
   {
    populatelist(req.responsexml);
   }
   else
   {
    clearselect(publishedbooks);
   }
  }
 }
 return true;
}

  注意 對象req被聲明為一個頁面級的變量:

var req = new activexobject("microsoft.xmlhttp");

  警告

  請求目的的url必須與客戶端腳本處于同一個域中。原因是,xmlhttprequest對象采用與客戶端腳本一致的封裝技術。在大多數支持這種功能的瀏覽器上,擁有存取xmlhttprequest對象的腳本的頁面都需要使用http:協議檢索。這意味著,你無法在一個本地硬盤上(file:協議)進行頁面測試。

  三、 實際問題

  在ajax中,如果網絡或遠程服務器出現中斷,會發生什么呢?實際上,存在兩個主要問題;默認地,它們并沒有在xmlhttprequest對象中得到解決。這兩個主要問題是:

  1.處理延遲:如果網絡或遠程服務器耗費較多時間,那么這個問題如何與你的ajax應用程序相聯系呢?

  2.響應順序:潛在地,網絡(或服務器)會不斷變化。這意味著,響應可能不會以與請求相同的順序返回。

  為了處理上面這兩個問題,程序員必須編寫代碼來解決這個問題。對于第一個問題,一種可能的方案如下所示:

function callinprogress(xmlhttp) {
 switch ( xmlhttp.readystate ) {
  case 1,2,3:
   return true;
   break;
   //case 4和0
  default:
   return false;
   break;
 }
}

  現在,在調用send()前,我可以先檢查一下是否該對象正處于忙態:

if ( !callinprogress(xmlhttp) ) {
 xmlhttp.send(null);
} else {
 alert("i'm busy. wait a moment");
}

  (一) 支持ajax技術的瀏覽器

  ·微軟internet explorer版本5.0及以上版本,和基于它的瀏覽器(mac os版本不支持)

  ·基于gecko的瀏覽器,如mozilla,mozilla firefox,seamonkey,epiphany,galeon和netscape版本7.1及以上版本

  ·實現khtml api版本3.2及以上版本的瀏覽器,包括konqueror版本3.2及以上版本,還有apple safari版本1.2及以上版本

  ·opera瀏覽器版本8.0及以上版本,包括opera mobile瀏覽器版本8.0及以上版本

  (二) 不支持ajax技術的瀏覽器

  ·opera 7及以下版本

  ·微軟internet explorer 4.0及以下版本

  ·基于文本的瀏覽器,如lynx和links

  ·沒有可視化實現的瀏覽器

  ·1997年以前的瀏覽器

  (三) 本文示例應用程序特定需求

  軟件要求:

  1.asp.net 2.0;

  2.ms sql server 2000,并要求相應的pubs數據庫設置;

  3.改變web.config文件中的db連接字符串("conn_string"鍵)。

<appsettings>
<add value="data source=cal-slcu2-196;database=pubs;user=sa;pwd=sa" key="conn_string" />
</appsettings>

  變量或類名應該象上面這樣被包括到<code>標記中。

  四、 總結

  本文概括性地歸納了基于ajax技術構建下一代流行web應用程序的主要技術及有關概念,并給出一個完整示例程序的關鍵片斷的分析。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91免费综合在线| 国产成人综合一区二区三区| 国产精品久久一区主播| 91国产精品电影| 日日狠狠久久偷偷四色综合免费| 亚洲欧美国产一区二区三区| 亚洲女同性videos| 欧美电影在线观看网站| 亚洲激情在线视频| 国产精品日韩欧美大师| 亚洲一区制服诱惑| 日韩在线资源网| 亚洲精品一区二区三区不| 亚洲自拍在线观看| 欧美日韩在线一区| 色哟哟网站入口亚洲精品| 日本91av在线播放| 欧美重口另类videos人妖| 亚洲欧美日本另类| 亚洲免费电影一区| 亚洲女人被黑人巨大进入al| 91久久精品日日躁夜夜躁国产| 国产精品视频大全| 国产精品高潮呻吟视频| 高清视频欧美一级| 在线观看不卡av| 久久视频在线看| 国内免费精品永久在线视频| 国产一区二区视频在线观看| 5566日本婷婷色中文字幕97| 久久久国产精彩视频美女艺术照福利| 欧洲中文字幕国产精品| 91亚洲精品在线| 视频直播国产精品| 日韩中文在线不卡| 亚洲精品视频中文字幕| 久久久国产视频| 亚洲午夜女主播在线直播| 欧美美女18p| 国外视频精品毛片| 精品久久久久久久久国产字幕| 日韩电影中文字幕av| 欧美激情一级欧美精品| 欧美在线一级va免费观看| 综合av色偷偷网| 欧美激情喷水视频| 日韩有码片在线观看| 欧美性猛交视频| 97在线观看免费| 在线日韩欧美视频| 亚洲福利影片在线| 国产亚洲美女久久| 久久精品这里热有精品| 日本一区二区三区四区视频| 日韩av电影在线网| 亚洲三级 欧美三级| 中文字幕一精品亚洲无线一区| 亚洲天堂av女优| 欧美xxxwww| 国产精品91久久| 欧美精品在线看| 亚洲精品乱码久久久久久按摩观| 久久av中文字幕| 亚洲日韩欧美视频| 成人激情视频网| 国产精品扒开腿做爽爽爽视频| 精品久久久香蕉免费精品视频| 2018国产精品视频| 久久精品国产一区二区电影| 久久久国产精品亚洲一区| 亚洲嫩模很污视频| 狠狠久久亚洲欧美专区| 久久久久久91| 美女999久久久精品视频| 国产精品高精视频免费| 91精品国产综合久久香蕉| 国产欧美一区二区三区在线| 国产精品久久婷婷六月丁香| 欧美一级bbbbb性bbbb喷潮片| 日韩一区在线视频| 欧美日韩国产成人高清视频| 久久久精品久久久| 国产精品福利在线| 欧美一区二区.| 一本大道香蕉久在线播放29| 97国产suv精品一区二区62| 亚洲在线免费视频| 国产精品羞羞答答| 亚洲一区www| 欧美一级视频一区二区| 欧美性受xxx| 韩国三级日本三级少妇99| 亚洲欧美日本伦理| 色综合久久精品亚洲国产| 亚洲一区二区久久久久久久| 国产日韩在线亚洲字幕中文| 91夜夜未满十八勿入爽爽影院| 欧美综合在线第二页| 国产精品久久视频| 亚洲国产精品福利| 亚洲美女精品成人在线视频| 91经典在线视频| 国产成人在线精品| 亚洲欧美日韩网| 亚洲精品色婷婷福利天堂| 国产免费一区二区三区香蕉精| 亚洲色图综合网| 久久中文字幕在线| 麻豆国产精品va在线观看不卡| 欧美成人午夜激情视频| 久久午夜a级毛片| 亚洲国产精品va在线观看黑人| 亚洲最新视频在线| 亚洲一区二区三区久久| 中文日韩在线观看| 亚洲一级黄色片| 欧美精品久久久久久久免费观看| 乱亲女秽乱长久久久| 欧美日韩美女在线观看| 欧美在线视频免费观看| 精品人伦一区二区三区蜜桃免费| 色婷婷综合成人av| 色噜噜久久综合伊人一本| 午夜精品一区二区三区视频免费看| 亚洲欧美国产高清va在线播| 日本久久久a级免费| 欧美日韩国产色视频| 亚洲精品国产精品国自产观看浪潮| 中文字幕日韩av综合精品| 亚洲最大在线视频| 国产精品老女人视频| 日韩在线视频免费观看高清中文| 欧美性jizz18性欧美| 91成人在线视频| 欧洲成人午夜免费大片| 久久午夜a级毛片| 国产欧美精品一区二区三区-老狼| 亚洲成年网站在线观看| 国产69久久精品成人看| 亚洲一区二区中文字幕| 91精品国产91久久久久久久久| 精品久久久久久| 国产精品一区二区三区毛片淫片| 欧美激情一区二区三区成人| 欧美激情免费观看| 在线成人一区二区| 亚洲欧美另类中文字幕| 人人澡人人澡人人看欧美| 亚洲白虎美女被爆操| 高清一区二区三区四区五区| 日韩国产精品视频| 97香蕉久久夜色精品国产| 久久频这里精品99香蕉| 成人免费看黄网站| 欧美成人在线影院| 亚洲视频视频在线| 中文字幕精品www乱入免费视频| 色琪琪综合男人的天堂aⅴ视频| 国产精品视频免费在线观看| 亚洲精品女av网站| 日韩中文字幕在线| 久久久久久久999| 久久人人爽亚洲精品天堂| 亚洲国产成人爱av在线播放|