Ajax介紹

AJAX

AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。javascript

AJAX 不是新的編程語言,而是一種使用現有標準的新方法。html

AJAX 是與服務器交換數據並更新部分網頁的藝術,在不從新加載整個頁面的狀況下。前端

在繼續學習以前,您須要對下面的知識有基本的瞭解:java

HTML / XHTML程序員

CSSweb

JavaScript / DOMajax

AJAX 是一種用於建立快速動態網頁的技術。經過在後臺與服務器進行少許數據交換,AJAX 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。傳統的網頁(不使用 AJAX)若是須要更新內容,必需重載整個網頁面。有不少使用 AJAX 的應用程序案例:新浪微博、Google 地圖、開心網等等。編程

XMLHttpRequest 是 AJAX 的基礎。小程序

1.什麼是Ajax? 
Ajax的全稱是:AsynchronousJavaScript+XML

2.Ajax的定義:
Ajax不是一個技術,它其實是幾種技術,每種技術都有其獨特這處,合在一塊兒就成了一個功能強大的新技術。

3.Ajax包括:
XHTML和CSS
使用文檔對象模型(DocumentObjectModel)做動態顯示和交互
使用XML和XSLT作數據交互和操做
使用XMLHttpRequest進行異步數據接收
使用JavaScript將它們綁定在一塊兒

Web開發領域的最新時髦術語其實質是「舊貌換新顏」。

Ajax(AsynchronousJavaScriptandXML)是結合了Java技術、XML以及JavaScript等編程技術,可讓開發人員構建基於Java技術的Web應用,並打破了使用頁面重載的慣例。

Ajax是使用客戶端腳本與Web服務器交換數據的Web應用開發方法。這樣,Web頁面不用打斷交互流程進行從新加裁,就能夠動態地更新。使用Ajax,用戶能夠建立接近本地桌面應用的直接、高可用、更豐富、更動態的Web用戶界面。

異步JavaScript和XML(AJAX)不是什麼新技術,而是指這樣一種方法:使用幾種現有技術——包括級聯樣式表(CSS)、JavaScript、XHTML、XML和可擴展樣式語言轉換(XSLT),開發外觀及操做相似桌面軟件的Web應用軟件。實現Ajax的全部組件都已存在了許多年。AdaptivePath的用戶體驗戰略部門主管兼創辦合夥人JesseJamesGarrett今年2月發表在AdaptivePath網站上的一篇文章中杜撰了這個術語。

異步這個詞是指AJAX應用軟件與主機服務器進行聯繫的方式。若是使用舊模式,每當用戶執行某種操做、向服務器請求得到新數據,Web瀏覽器就會更新當前窗口。

若是使用AJAX的異步模式,瀏覽器就沒必要等用戶請求操做,也沒必要更新整個窗口就能夠顯示新獲取的數據。只要來回傳送採用XML格式的數據,在瀏覽器裏面運行的JavaScript代碼就能夠與服務器進行聯繫。JavaScript代碼還能夠把樣式表加到檢索到的數據上,而後在現有網頁的某個部分加以顯示。

在面向消費者的諸多應用當中,Google的Gmail和GoogleMaps就是最多見的例子。在Gmail當中,AJAX負責如何開啓線程會話,以顯示不一樣郵件的文本內容。而在Maps當中,AJAX容許用戶以一種彷佛無縫的方式拖拉及滾動地圖。

還有雅虎的Flickr像片共享應用和亞馬遜網站的A9搜索引擎。另外,雅虎新的Web郵件服務可能很快就會吸引AJAX支持者的莫大關注,這項服務基於雅虎收購Oddpost後獲得的技術。

這些UI都充分地使用了後臺通道,也被一些開發者稱爲「Web2.0」,並致使了你們對Ajax應用興趣的猛漲。

然而,AJAX應用軟件廠商愈來愈把目光瞄準了企業。譬如說,Scalix的WebAccess電子郵件應用軟件其實比微軟Outlook本身的Web郵件界面更像Outlook。

不過AJAX應用軟件的適用領域具備必定的侷限性。由於它們利用了一些最新的Web技術,因此只能在某些Web瀏覽器裏面運行——不過AJAX適用的瀏覽器正愈來愈多。

Ajax

Ajax,異步JavaScript與XML,是使用客戶端腳本與Web服務器交換數據的Web應用開發方法。這樣,Web頁面不用打斷交互流程進行從新加裁,就能夠動態地更新。使用Ajax,你能夠建立接近本地桌面應用的,直接的、高可用的、更豐富的、更動態的Web用戶接口界面。

Ajax處理過程

一個Ajax交互從一個稱爲XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它容許一個客戶端腳原本執行HTTP請求,而且將會解析一個XML格式的服務器響應。Ajax處理過程當中的第一步是建立一個XMLHttpRequest實例。使用HTTP方法(GET或POST)來處理請求,並將目標URL設置到XMLHttpRequest對象上。

如今,記住Ajax如何首先處於異步處理狀態?當你發送HTTP請求,你不但願瀏覽器掛起並等待服務器的響應,取而代之的是,你但願經過頁面繼續響應用戶的界面交互,並在服務器響應真正到達後處理它們。要完成它,你能夠向XMLHttpRequest註冊一個回調函數,並異步地派發XMLHttpRequest請求。控制權立刻就被返回到瀏覽器,當服務器響應到達時,回調函數將會被調用。

在JavaWeb服務器上,到達的請求與任何其它HttpServletRequest同樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。

一個Ajax交互從一個稱爲XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它容許一個客戶端腳原本執行HTTP請求,而且將會解析一個XML格式的服務器響應。Ajax處理過程當中的第一步是建立一個XMLHttpRequest實例。使用HTTP方法(GET或POST)來處理請求,並將目標URL設置到XMLHttpRequest對象上。

如今,記住Ajax如何首先處於異步處理狀態?當你發送HTTP請求,你不但願瀏覽器掛起並等待服務器的響應,取而代之的是,你但願經過頁面繼續響應用戶的界面交互,並在服務器響應真正到達後處理它們。要完成它,你能夠向XMLHttpRequest註冊一個回調函數,並異步地派發XMLHttpRequest請求。控制權立刻就被返回到瀏覽器,當服務器響應到達時,回調函數將會被調用。

在JavaWeb服務器上,到達的請求與任何其它HttpServletRequest同樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。

一個Ajax交互從一個稱爲XMLHttpRequest的JavaScript對象開始。如同名字所暗示的,它容許一個客戶端腳原本執行HTTP請求,而且將會解析一個XML格式的服務器響應。Ajax處理過程當中的第一步是建立一個XMLHttpRequest實例。使用HTTP方法(GET或POST)來處理請求,並將目標URL設置到XMLHttpRequest對象上。

如今,記住Ajax如何首先處於異步處理狀態?當你發送HTTP請求,你不但願瀏覽器掛起並等待服務器的響應,取而代之的是,你但願經過頁面繼續響應用戶的界面交互,並在服務器響應真正到達後處理它們。要完成它,你能夠向XMLHttpRequest註冊一個回調函數,並異步地派發XMLHttpRequest請求。控制權立刻就被返回到瀏覽器,當服務器響應到達時,回調函數將會被調用。

在JavaWeb服務器上,到達的請求與任何其它HttpServletRequest同樣。在解析請求參數後,servlet執行必需的應用邏輯,將響應序列化到XML中,並將它寫回HttpServletResponse。


Ajax工做原理

 

  在寫這篇文章以前,曾經寫過一篇關於AJAX技術的隨筆,不過涉及到的方面很窄,對AJAX技術的背景、原理、優缺點等各個方面都不多涉及null。此次寫這篇文章的背景是由於公司須要對內部程序員作一個培訓。項目經理找到了我,而且徵詢我培訓的主題,考慮到以前Javascript、CSS等WEB開發技術都已經講解過了,因此決定針對AJAX這一塊作一個比較系統的培訓,因此這篇文章其實是一個培訓的材料。後端

      在這篇文章中,我將從10個方面來對AJAX技術進行系統的講解。

 

一、ajax技術的背景

 

      不能否認,ajax技術的流行得益於google的大力推廣,正是因爲google earth、google suggest以及gmail等對ajax技術的普遍應用,催生了ajax的流行。而這也讓微軟感到無比的尷尬,由於早在97年,微軟便已經發明瞭ajax中的關鍵技術,而且在99年IE5推出之時,它便開始支持XmlHttpRequest對象,而且微軟以前已經開始在它的一些產品中應用ajax,好比說MSDN網站菜單中的一些應用。遺憾的是,不知道出於什麼想法,當時微軟發明了ajax的核心技術以後,並無看到它的潛力而加以發展和推廣,而是將它擱置起來。對於這一點來講,我我的是以爲很是奇怪的,由於以微軟的資源和它的戰略眼光來講,應該不會看不到ajax技術的前景,惟一的解釋也許就是由於當時它的主要競爭對手Netscape的消失反而使它變得麻痹和遲鈍,畢竟巨人也有打盹的時候,好比IBM曾經在對微軟戰略上的失誤。正是這一次的失誤,成就了它如今的競爭對手google在ajax方面的領先地位,而事實上google目前在ajax技術方面的領先是微軟所沒法達到的,這一點在後面我講述ajax缺陷的時候也會提到。如今微軟也意識到了這個問題,所以它也開始在ajax領域奮起直追,好比說推出它本身的ajax框架atlas,而且在.NET2.0也提供了一個用來實現異步回調的接口,即ICallBack接口。那麼微軟爲何對本身在ajax方面的落後如此緊張呢?如今就讓咱們來分析一下ajax技術後面隱藏的深入意義。

 

二、ajax技術的意義

 

     咱們在平時的開發中都多多少少的接觸或者應用到了ajax,談到ajax技術的意義,咱們關注得最多的毫無疑問是提高用戶的體驗。可是,若是咱們結合未來電腦和互聯網的發展趨勢,咱們會發現ajax技 術在某些方面正好表明了這種趨勢。爲何這樣說呢?咱們知道,自從電腦出現以來,一直是桌面軟件佔據着絕對主導的地位,可是互聯網的出現和成功使這一切開 始發生着微妙的變化。至關一部分的人都相信,早晚有一天,數據和電腦軟件將會從桌面轉移到互聯網。也就是說,未來的電腦有可能拋棄笨重的硬盤,而直接從互 聯網來獲取數據和服務,我記得我念大學的時候,有位教授給咱們上課的時候,曾經設想過這樣一種情景,也許在未來的電腦桌面上,沒有任何多餘的軟件和程序, 而僅僅只有一個IE,雖然如今看起來咱們距離這一天還很遙遠,而且這其中還有不少的問題須要解決,可是我以爲這個並不是夢想,而是早晚將實現的現實。那麼,這其中的主要問題就是互聯網的鏈接不穩定,誰也不肯意看着本身的電腦從服務器一點一滴的下載數據,那麼,ajax是否是解決了這個問題呢,說實話,與其說ajax解決了這個問題,倒不如它只是掩蓋了這個問題,它只是在服務器和客戶端之間充當了一個緩衝器,讓用戶誤覺得服務沒有中斷。精確的說,ajax並不能提升從服務器端下載數據的速度,而只是使這個等待不那麼使人沮喪。可是正是這一點就足以產生巨大的影響和震動,它實際上也對桌面軟件產生了巨大的衝擊。這一點我用一個例子來講明,咱們能夠比較一下Outlook Express和Gmail,前者是典型的桌面軟件,後者是ajax所實現的B/S模式,實際上後者目前已經在慢慢取代前者了,Gmail在收發郵件的時候已經和Outlook Express的功能幾乎沒有差異了,並且它不須要安裝客戶端程序。這就是爲何微軟對ajax所帶來的衝擊有着如此的恐懼心理,而且在它前不久所進行的調查之中,將google看作他們將來十年內的主要競爭對手的主要緣由之一。固然,這種變化也並不會將桌面軟件所有淘汰,現有的瀏覽器尚未一個能像PhotoShop等桌面程序那樣處理複雜的圖像。可是咱們也不能忽視它帶來的影響和衝擊。

 

三、關於ajax的名字

 

    ajax 的全稱是Asynchronous JavaScript and XML,其中,Asynchronous 是異步的意思,它有別於傳統web開發中採用的同步的方式。

 

四、關於同步和異步

 

異步傳輸是面向字符的傳輸,它的單位是字符;而同步傳輸是面向比特的傳輸,它的單位是楨,它傳輸的時候要求接受方和發送方的時鐘是保持一致的。

具體來講,異步傳輸是將比特分紅小組來進行傳送。通常每一個小組是一個8位字符,在每一個小組的頭部和尾部都有一個開始位和一箇中止位,它在傳送過程當中接收方和發送方的時鐘不要求一致,也就是說,發送方能夠在任什麼時候刻發送這些小組,而接收方並不知道它何時到達。一個最明顯的例子就是計算機鍵盤和主機的通訊,按下一個鍵的同時向主機發送一個8比特位的ASCII代 碼,鍵盤能夠在任什麼時候刻發送代碼,這取決於用戶的輸入速度,內部的硬件必須可以在任什麼時候刻接收一個鍵入的字符。這是一個典型的異步傳輸過程。異步傳輸存在 一個潛在的問題,即接收方並不知道數據會在何時到達。在它檢測到數據並作出響應以前,第一個比特已通過去了。這就像有人出乎意料地從後面走上來跟你說 話,而你沒來得及反應過來,漏掉了最前面的幾個詞。所以,每次異步傳輸的信息都以一個起始位開頭,它通知接收方數據已經到達了,這就給了接收方響應、接收 和緩存數據比特的時間;在傳輸結束時,一箇中止位表示該次傳輸信息的終止。按照慣例,空閒(沒有傳送數據)的線路實際攜帶着一個表明二進制1的信號。步傳輸的開始位使信號變成0,其餘的比特位使信號隨傳輸的數據信息而變化。最後,中止位使信號從新變回1,該信號一直保持到下一個開始位到達。例如在鍵盤上數字「1」,按照8比特位的擴展ASCII編碼,將發送「00110001」,同時須要在8比特位的前面加一個起始位,後面一箇中止位。

同步傳輸的比特分組要大得多。它不是獨立地發送每一個字符,每一個字符都有本身的開始位和中止位,而是把它們組合起來一塊兒發送。咱們將這些組合稱爲數據幀,或簡稱爲幀。

  數據幀的第一部分包含一組同步字符,它是一個獨特的比特組合,相似於前面提到的起始位,用於通知接收方一個幀已經到達,但它同時還能確保接收方的採樣速度和比特的到達速度保持一致,使收發雙方進入同步。

  幀的最後一部分是一個幀結束標記。與同步字符同樣,它也是一個獨特的比特串,相似於前面提到的中止位,用於表示在下一幀開始以前沒有別的即將到達的數據了。

  同步傳輸一般要比異步傳輸快速得多。接收方沒必要對每一個字符進行開始和中止的操做。一旦檢測到幀同步字符,它就在接下來的數據到達時接收它們。另外,同步傳輸的開銷也比較少。例如,一個典型的幀可能有500字節(即4000比特)的數據,其中可能只包含100比特的開銷。這時,增長的比特位使傳輸的比特總數增長2.5%,這與異步傳輸中25 %的增值要小得多。隨着數據幀中實際數據比特位的增長,開銷比特所佔的百分比將相應地減小。可是,數據比特位越長,緩存數據所須要的緩衝區也越大,這就限制了一個幀的大小。另外,幀越大,它佔據傳輸媒體的連續時間也越長。在極端的狀況下,這將致使其餘用戶等得過久。

     瞭解了同步和異步的概念以後,你們應該對ajax爲何能夠提高用戶體驗應該比較清晰了,它是利用異步請求方式的。打個比方,若是如今你家裏所在的小區因 某種狀況而面臨停水,如今有關部門公佈了兩種方案,一是徹底停水8個小時,在這8個小時內徹底停水,8個小時後恢復正常。二是不徹底停水10 個小時,在這10個小時內水沒有徹底斷,只是流量比原來小了不少,在10個小時後恢復正常流量,那麼,若是是你你會選擇哪一種方式呢?顯然是後者。

 

五、ajax所包含的技術

 

    你們都知道ajax並不是一種新的技術,而是幾種原有技術的結合體。它由下列技術組合而成。

   1.使用CSS和XHTML來表示。

   2. 使用DOM模型來交互和動態顯示。

   3.使用XMLHttpRequest來和服務器進行異步通訊。

   4.使用javascript來綁定和調用。

在上面幾中技術中,除了XmlHttpRequest對象之外,其它全部的技術都是基於web標準而且已經獲得了普遍使用的,XMLHttpRequest雖然目前尚未被W3C所採納,可是它已是一個事實的標準,由於目前幾乎全部的主流瀏覽器都支持它。

 

六、ajax原理和XmlHttpRequest對象

 

  Ajax的原理簡單來講經過XmlHttpRequest對象來向服務器發異步請求,從服務器得到數據,而後用javascript來操做DOM而更新頁面。這其中最關鍵的一步就是從服務器得到請求數據。要清楚這個過程和原理,咱們必須對 XMLHttpRequest有所瞭解。

 XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript能夠及時向服務器提出請求和處理響應,而不阻塞用戶。達到無刷新的效果。

   因此咱們先從XMLHttpRequest講起,來看看它的工做原理。

   首先,咱們先來看看XMLHttpRequest這個對象的屬性。

    它的屬性有:

    onreadystatechange  每次狀態改變所觸發事件的事件處理程序。

    responseText     從服務器進程返回數據的字符串形式。

    responseXML    從服務器進程返回的DOM兼容的文檔數據對象。

    status           從服務器返回的數字代碼,好比常見的404(未找到)和200(已就緒)

    status Text       伴隨狀態碼的字符串信息

    readyState       對象狀態值

    0 (未初始化) 對象已創建,可是還沒有初始化(還沒有調用open方法)

    1 (初始化) 對象已創建,還沒有調用send方法

    2 (發送數據) send方法已調用,可是當前的狀態及http頭未知

    3 (數據傳送中) 已接收部分數據,由於響應及http頭不全,這時經過responseBody和responseText獲取部分數據會出現錯誤,

    4 (完成) 數據接收完畢,此時能夠經過經過responseXml和responseText獲取完整的迴應數據

 

  可是,因爲各瀏覽器之間存在差別,因此建立一個XMLHttpRequest對象可能須要不一樣的方法。這個差別主要體如今IE和其它瀏覽器之間。下面是一個比較標準的建立XMLHttpRequest對象的方法。

  

 
function CreateXmlHttp() {

//非IE瀏覽器建立XmlHttpRequest對象
if (window.XmlHttpRequest) {
xmlhttp = new XmlHttpRequest();
}

//IE瀏覽器建立XmlHttpRequest對象
if (window.ActiveXObject) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {
try {
xmlhttp = new ActiveXObject("msxml2.XMLHTTP");
}
catch (ex) { }
}
}
}

function Ustbwuyi() {

var data = document.getElementById("username").value;
CreateXmlHttp();
if (!xmlhttp) {
alert("建立xmlhttp對象異常!");
return false;
}

xmlhttp.open("POST", url, false);

xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
document.getElementById("user1").innerHTML = "數據正在加載...";
if (xmlhttp.status == 200) {
document.write(xmlhttp.responseText);
}
}
}
xmlhttp.send();
}
 


  如上所示,函數首先檢查XMLHttpRequest的總體狀態而且保證它已經完成(readyStatus=4),即數據已經發送完畢。而後根據服務器的設定詢問請求狀態,若是一切已經就緒(status=200),那麼就執行下面須要的操做。

對於XmlHttpRequest的兩個方法,open和send,其中open方法指定了:

a、向服務器提交數據的類型,即post仍是get。

b、請求的url地址和傳遞的參數。

      c、傳輸方式,false爲同步,true爲異步。默認爲true。若是是異步通訊方式(true),客戶機就不等待服務器的響應;若是是同步方式(false),客戶機就要等到服務器返回消息後纔去執行其餘操做。咱們須要根據實際須要來指定同步方式,在某些頁面中,可能會發出多個請求,甚至是有組織有計劃有隊形大規模的高強度的request,然後一個是會覆蓋前一個的,這個時候固然要指定同步方式。

    Send方法用來發送請求。

 

  知道了XMLHttpRequest的工做流程,咱們能夠看出,XMLHttpRequest是徹底用來向服務器發出一個請求的,它的做用也侷限於此,但它的做用是整個ajax實現的關鍵,由於ajax無非是兩個過程,發出請求和響應請求。而且它徹底是一種客戶端的技術。而XMLHttpRequest正是處理了服務器端和客戶端通訊的問題因此纔會如此的重要。

  如今,咱們對ajax的原理大概能夠有一個瞭解了。咱們能夠把服務器端當作一個數據接口,它返回的是一個純文本流,固然,這個文本流能夠是XML格式,能夠是Html,能夠是Javascript代碼,也能夠只是一個字符串。這時候,XMLHttpRequest向服務器端請求這個頁面,服務器端將文本的結果寫入頁面,這和普通的web開發流程是同樣的,不一樣的是,客戶端在異步獲取這個結果後,不是直接顯示在頁面,而是先由javascript來處理,而後再顯示在頁面。至於如今流行的不少ajax控件,好比magicajax等,能夠返回DataSet等其它數據類型,只是將這個過程封裝了的結果,本質上他們並無什麼太大的區別。

 

七、ajax的優勢

 

   Ajax的給咱們帶來的好處你們基本上都深有體會,在這裏我只簡單的講幾點:

    一、最大的一點是頁面無刷新,在頁面內與服務器通訊,給用戶的體驗很是好。

  二、使用異步方式與服務器通訊,不須要打斷用戶的操做,具備更加迅速的響應能力。

  三、能夠把之前一些服務器負擔的工做轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。而且減輕服務器的負擔,ajax的原則是「按需取數據」,能夠最大程度的減小冗餘請求,和響應對服務器形成的負擔。

    四、基於標準化的並被普遍支持的技術,不須要下載插件或者小程序。

 

八、ajax的缺點

 

  下面我着重講一講ajax的缺陷,由於平時咱們大多注意的都是ajax給咱們所帶來的好處諸如用戶體驗的提高。而對ajax所帶來的缺陷有所忽視。

  下面所闡述的ajax的缺陷都是它先天所產生的。

    一、ajax幹掉了back按鈕,即對瀏覽器後退機制的破壞。後退按鈕是一個標準的web站點的重要功能,可是它無法和js進行很好的合做。這是ajax所帶來的一個比較嚴重的問題,由於用戶每每是但願可以經過後退來取消前一次操做的。那麼對於這個問題有沒有辦法?答案是確定的,用過Gmail的知道,Gmail下面採用的ajax技術解決了這個問題,在Gmail下面是能夠後退的,可是,它也並不能改變ajax的機制,它只是採用的一個比較笨可是有效的辦法,即用戶單擊後退按鈕訪問歷史記錄時,經過建立或使用一個隱藏的IFRAME來重現頁面上的變動。(例如,當用戶在Google Maps中單擊後退時,它在一個隱藏的IFRAME中進行搜索,而後將搜索結果反映到Ajax元素上,以便將應用程序狀態恢復到當時的狀態。)

可是,雖說這個問題是能夠解決的,可是它所帶來的開發成本是很是高的,和ajax框架所要求的快速開發是相背離的。這是ajax所帶來的一個很是嚴重的問題。

     二、安全問題

技術同時也對IT企業帶來了新的安全威脅,ajax技術就如同對企業數據創建了一個直接通道。這使得開發者在不經意間會暴露比之前更多的數據和服務器邏輯。ajax的邏輯能夠對客戶端的安全掃描技術隱藏起來,容許黑客從遠端服務器上創建新的攻擊。還有ajax也難以免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基於credentials的安全漏洞等。

     三、對搜索引擎的支持比較弱。

 

 

 

1.什麼是AJAX?
AJAX全稱爲「Asynchronous JavaScript and XML」(異步JavaScript和XML),是一種建立交互式網頁應用的網頁開發技術。它使用:
使用XHTML+CSS來標準化呈現;
使用XML和XSLT進行數據交換及相關操做;
使用XMLHttpRequest對象與Web服務器進行異步數據通訊; 
使用Javascript操做Document Object Model進行動態顯示及交互; 
使用JavaScript綁定和處理全部數據。

2.與傳統的web應用比較
傳統的Web應用交互由用戶觸發一個HTTP請求到服務器,服務器對其進行處理後再返回一個新的HTHL頁到客戶端, 每當服務器處理客戶端提交的請求時,客戶都只能空閒等待,而且哪怕只是一次很小的交互、只需從服務器端獲得很簡單的一個數據,都要返回一個完整的HTML頁,而用戶每次都要浪費時間和帶寬去從新讀取整個頁面。這個作法浪費了許多帶寬,因爲每次應用的交互都須要向服務器發送請求,應用的響應時間就依賴於服務器的響應時間。這致使了用戶界面的響應比本地應用慢得多。
與此不一樣,AJAX應用能夠僅向服務器發送並取回必需的數據,它使用SOAP或其它一些基於XML的Web Service接口,並在客戶端採用JavaScript處理來自服務器的響應。由於在服務器和瀏覽器之間交換的數據大量減小,結果咱們就能看到響應更快的應用。同時不少的處理工做能夠在發出請求的客戶端機器上完成,因此Web服務器的處理時間也減小了。

3.AJAX的工做原理
Ajax的工做原理至關於在用戶和服務器之間加了—箇中間層(AJAX引擎),使用戶操做與服務器響應異步化。並非全部的用戶請求都提交給服務器,像—些數據驗證和數據處理等都交給Ajax引擎本身來作, 只有肯定須要從服務器讀取新數據時再由Ajax引擎代爲向服務器提交請求。

Ajax其核心有JavaScript、XMLHTTPRequest、DOM對象組成,經過XmlHttpRequest對象來向服務器發異步請求,從服務器得到數據,而後用JavaScript來操做DOM而更新頁面。這其中最關鍵的一步就是從服務器得到請求數據。讓咱們來了解這幾個對象。
(1).XMLHTTPRequest對象
Ajax的一個最大的特色是無需刷新頁面即可向服務器傳輸或讀寫數據(又稱無刷新更新頁面),這一特色主要得益於XMLHTTP組件XMLHTTPRequest對象。
XMLHttpRequest 對象方法描述 

方    法 描    述
abort() 中止當前請求 
getAllResponseHeaders() 把HTTP請求的全部響應首部做爲鍵/值對返回
getResponseHeader("header") 返回指定首部的串值
open("method","URL",[asyncFlag],["userName"],["password"])  創建對服務器的調用。method參數能夠是GET、POST或PUT。url參數能夠是相對URL或絕對URL。這個方法還包括3個可選的參數,是否異步,用戶名,密碼
send(content) 向服務器發送請求
setRequestHeader("header", "value") 把指定首部設置爲所提供的值。在設置任何首部以前必須先調用open()。設置header並和請求一塊兒發送 ('post'方法必定要 )

XMLHttpRequest 對象屬性描述

  屬  性 描    述
onreadystatechange 狀態改變的事件觸發器,每一個狀態改變時都會觸發這個事件處理器,一般會調用一個JavaScript函數
readyState 請求的狀態。有5個可取值:0 = 未初始化,1 = 正在加載,2 = 已加載,3 = 交互中,4 = 完成
responseText 服務器的響應,返回數據的文本。
responseXML 服務器的響應,返回數據的兼容DOM的XML文檔對象 ,這個對象能夠解析爲一個DOM對象。
responseBody  服務器返回的主題(非文本格式)
responseStream 服務器返回的數據流
status 服務器的HTTP狀態碼(如:404 = "文件末找到" 、200 ="成功" ,等等)
statusText 服務器返回的狀態文本信息 ,HTTP狀態碼的相應文本(OK或Not Found(未找到)等等)

(2).JavaScript
JavaScript是一在瀏覽器中大量使用的編程語言。
(3).DOM Document Object Model
DOM是給HTML和XML文件使用的一組API。它提供了文件的結構表述,讓你能夠改變其中的內容及可見物。其本質是創建網頁與Script或程序語言溝通的橋樑。全部WEB開發人員可操做及創建文件的屬性、方法及事件都以對象來展示(例如,document就表明「文件自己「這個對像,table對象則表明HTML的表格對象等等)。這些對象能夠由當今大多數的瀏覽器以Script來取用。一個用HTML或XHTML構建的網頁也能夠看做是一組結構化的數據,這些數據被封在DOM(Document Object Model)中,DOM提供了網頁中各個對象的讀寫的支持。
(4).XML
可擴展的標記語言(Extensible Markup Language)具備一種開放的、可擴展的、可自描述的語言結構,它已經成爲網上數據和文檔傳輸的標準,用於其餘應用程序交換數據 。
(5).綜合
Ajax引擎,其實是一個比較複雜的JavaScript應用程序,用來處理用戶請求,讀寫服務器和更改DOM內容。JavaScript的Ajax引擎讀取信息,而且互動地重寫DOM,這使網頁能無縫化重構,也就是在頁面已經下載完畢後改變頁面內容,這是咱們一直在經過JavaScript和DOM在普遍使用的方法,但要使網頁真正動態起來,不只要內部的互動,還須要從外部獲取數據,在之前,咱們是讓用戶來輸入數據並經過DOM來改變網頁內容的,但如今,XMLHTTPRequest,可讓咱們在不重載頁面的狀況下讀寫服務器上的數據,使用戶的輸入達到最少。

Ajax使WEB中的界面與應用分離(也能夠說是數據與呈現分離),而在之前二者是沒有清晰的界限的,數據與呈現分離的分離,有利於分工合做、減小非技術人員對頁面的修改形成的WEB應用程序錯誤、提升效率、也更加適用於如今的發佈系統。也能夠把之前的一些服務器負擔的工做轉嫁到客戶端,利於客戶端閒置的處理能力來處理。

4.AJAX的優缺點
(1).AJAX的優勢
<1>.無刷新更新數據。
AJAX最大優勢就是能在不刷新整個頁面的前提下與服務器通訊維護數據。這使得Web應用程序更爲迅捷地響應用戶交互,並避免了在網絡上發送那些沒有改變的信息,減小用戶等待時間,帶來很是好的用戶體驗。
<2>.異步與服務器通訊。
AJAX使用異步方式與服務器通訊,不須要打斷用戶的操做,具備更加迅速的響應能力。優化了Browser和Server之間的溝通,減小沒必要要的數據傳輸、時間及下降網絡上數據流量。
<3>.前端和後端負載平衡。
AJAX能夠把之前一些服務器負擔的工做轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。而且減輕服務器的負擔,AJAX的原則是「按需取數據」,能夠最大程度的減小冗餘請求和響應對服務器形成的負擔,提高站點性能。
<4>.基於標準被普遍支持。
AJAX基於標準化的並被普遍支持的技術,不須要下載瀏覽器插件或者小程序,但須要客戶容許JavaScript在瀏覽器上執行。隨着Ajax的成熟,一些簡化Ajax使用方法的程序庫也相繼問世。一樣,也出現了另外一種輔助程序設計的技術,爲那些不支持JavaScript的用戶提供替代功能。
<5>.界面與應用分離。
Ajax使WEB中的界面與應用分離(也能夠說是數據與呈現分離),有利於分工合做、減小非技術人員對頁面的修改形成的WEB應用程序錯誤、提升效率、也更加適用於如今的發佈系統。

(2).AJAX的缺點
<1>.AJAX幹掉了Back和History功能,即對瀏覽器機制的破壞。
在動態更新頁面的狀況下,用戶沒法回到前一個頁面狀態,由於瀏覽器僅能記憶歷史記錄中的靜態頁面。一個被完整讀入的頁面與一個已經被動態修改過的頁面之間的差異很是微妙;用戶一般會但願單擊後退按鈕可以取消他們的前一次操做,可是在Ajax應用程序中,這將沒法實現。
後退按鈕是一個標準的web站點的重要功能,可是它無法和js進行很好的合做。這是Ajax所帶來的一個比較嚴重的問題,由於用戶每每是但願可以經過後退來取消前一次操做的。那麼對於這個問題有沒有辦法?答案是確定的,用過Gmail的知道,Gmail下面採用的Ajax技術解決了這個問題,在Gmail下面是能夠後退的,可是,它也並不能改變Ajax的機制,它只是採用的一個比較笨可是有效的辦法,即用戶單擊後退按鈕訪問歷史記錄時,經過建立或使用一個隱藏的IFRAME來重現頁面上的變動。(例如,當用戶在Google Maps中單擊後退時,它在一個隱藏的IFRAME中進行搜索,而後將搜索結果反映到Ajax元素上,以便將應用程序狀態恢復到當時的狀態。)
可是,雖說這個問題是能夠解決的,可是它所帶來的開發成本是很是高的,並與Ajax框架所要求的快速開發是相背離的。這是Ajax所帶來的一個很是嚴重的問題。
一個相關的觀點認爲,使用動態頁面更新使得用戶難於將某個特定的狀態保存到收藏夾中。該問題的解決方案也已出現,大部分都使用URL片段標識符(一般被稱爲錨點,即URL中#後面的部分)來保持跟蹤,容許用戶回到指定的某個應用程序狀態。(許多瀏覽器容許JavaScript動態更新錨點,這使得Ajax應用程序可以在更新顯示內容的同時更新錨點。)這些解決方案也同時解決了許多關於不支持後退按鈕的爭論。
<2>.AJAX的安全問題。
AJAX技術給用戶帶來很好的用戶體驗的同時也對IT企業帶來了新的安全威脅,Ajax技術就如同對企業數據創建了一個直接通道。這使得開發者在不經意間會暴露比之前更多的數據和服務器邏輯。Ajax的邏輯能夠對客戶端的安全掃描技術隱藏起來,容許黑客從遠端服務器上創建新的攻擊。還有Ajax也難以免一些已知的安全弱點,諸如跨站點腳步攻擊、SQL注入攻擊和基於Credentials的安全漏洞等等。
<3>.對搜索引擎支持較弱。
對搜索引擎的支持比較弱。若是使用不當,AJAX會增大網絡數據的流量,從而下降整個系統的性能。
<4>.破壞程序的異常處理機制。
至少從目前看來,像Ajax.dll,Ajaxpro.dll這些Ajax框架是會破壞程序的異常機制的。關於這個問題,曾在開發過程當中遇到過,可是查了一下網上幾乎沒有相關的介紹。後來作了一次試驗,分別採用Ajax和傳統的form提交的模式來刪除一條數據……給咱們的調試帶來了很大的困難。
<5>.違背URL和資源定位的初衷。
例如,我給你一個URL地址,若是採用了Ajax技術,也許你在該URL地址下面看到的和我在這個URL地址下看到的內容是不一樣的。這個和資源定位的初衷是相背離的。
<6>.AJAX不能很好支持移動設備。
一些手持設備(如手機、PDA等)如今還不能很好的支持Ajax,好比說咱們在手機的瀏覽器上打開採用Ajax技術的網站時,它目前是不支持的。
<7>.客戶端過肥,太多客戶端代碼形成開發上的成本。
編寫複雜、容易出錯 ;冗餘代碼比較多(層層包含js文件是AJAX的通病,再加上以往的不少服務端代碼如今放到了客戶端);破壞了Web的原有標準。

5.AJAX注意點及適用和不適用場景
(1).注意點
Ajax開發時,網絡延遲——即用戶發出請求到服務器發出響應之間的間隔——須要慎重考慮。不給予用戶明確的迴應,沒有恰當的預讀數據,或者對XMLHttpRequest的不恰當處理,都會使用戶感到延遲,這是用戶不但願看到的,也是他們沒法理解的。一般的解決方案是,使用一個可視化的組件來告訴用戶系統正在進行後臺操做而且正在讀取數據和內容。
(2).Ajax適用場景
<1>.表單驅動的交互
<2>.深層次的樹的導航
<3>.快速的用戶與用戶間的交流響應
<4>.相似投票、yes/no等無關痛癢的場景
<5>.對數據進行過濾和操縱相關數據的場景
<6>.普通的文本輸入提示和自動完成的場景
(3).Ajax不適用場景
<1>.部分簡單的表單
<2>.搜索
<3>.基本的導航
<4>.替換大量的文本
<5>.對呈現的操縱

     四、破壞了程序的異常機制。至少從目前看來,像ajax.dll,ajaxpro.dll這些ajax框架是會破壞程序的異常機制的。關於這個問題,我曾經在開發過程當中遇到過,可是查了一下網上幾乎沒有相關的介紹。後來我本身作了一次試驗,分別採用ajax和傳統的form提交的模式來刪除一條數據……給咱們的調試帶來了很大的困難。

     五、另外,像其餘方面的一些問題,好比說違背了url和資源定位的初衷。例如,我給你一個url地址,若是採用了ajax技術,也許你在該url地址下面看到的和我在這個url地址下看到的內容是不一樣的。這個和資源定位的初衷是相背離的。

     六、一些手持設備(如手機、PDA等)如今還不能很好的支持ajax,好比說咱們在手機的瀏覽器上打開採用ajax技術的網站時,它目前是不支持的,固然,這個問題和咱們沒太多關係。

 

 

九、ajax的幾種框架

 

  目前咱們採用的比較多的ajax框架主要有ajax.dll,ajaxpro.dll,magicajax.dll 以及微軟的atlas框架。Ajax.dll和Ajaxpro.dll這兩個框架差異不大,而magicajax.dll只是封裝得更厲害一些,好比說它能夠直接返回DataSet數據集,前面咱們已經說過,ajax返回的都是字符串,magicajax只是對它進行了封裝而已。可是它的這個特色能夠給咱們帶來很大的方便,好比說咱們的頁面有一個列表,而列表的數據是不斷變化的,那麼咱們能夠採用magicajax來處理,操做很簡單,添加magicajax以後,將要更新的列表控件放在magicajax的控件以內,而後在pageload裏面定義更新間隔的時間就ok了,atlas的原理和magicajax差很少。可是,須要注意的一個問題是,這幾種框架都只支持IE,沒有進行瀏覽器兼容方面的處理,用反編譯工具察看他們的代碼就能夠知道。

 除了這幾種框架以外,咱們平時用到的比較多的方式是本身建立xmlHttpRequest對象,這種方式和前面的幾種框架相比更具備靈活性。另外,在這裏還提一下aspnet2.0自帶的異步回調接口,它和ajax同樣也能夠實現局部的無刷新,但它的實現實際上也是基於xmlhttprequest對象的,另外也是隻支持IE,固然這是微軟的一個競爭策略。

 

十、ajax示例

 

驗證用戶名是否註冊。

採用兩種方式

  1 ajax.dll

  2 本身寫xmlhttprequest對象

 

10.ajax中常見到的一些錯誤

   1 配置的問題

 

  在pageload裏面配置該頁面的時候

 

11

  在後臺調用的方法裏調用了前臺的部分…

相關文章
相關標籤/搜索