- Ajax與jQuery程序設計
- 程永恒
- 2398字
- 2020-06-29 11:32:55
1.3 Ajax技術簡介
Ajax由Jesse James Garrett在2005年2月的一篇文章中提出。Ajax并不是一種新的語言或技術,它由幾種已有的技術組合而成。
Ajax通過在瀏覽器和服務器之間添加Ajax中間層,允許瀏覽器異步發送請求,同時允許動態加載服務器響應。用戶的請求不再直接向服務器提交,而是使用XMLHttpRequest異步地向服務器發送,從而避免丟棄當前頁面。
1.3.1 Ajax的工作方式
Ajax的核心是JavaScript對象XMLHttpRequest。該對象在Internet Explorer 5中首次引入,它提供了異步發送請求的能力。簡而言之,使用XMLHttpRequest,可以通過JavaScript向服務器發送請求,并能夠處理服務器響應,避免阻塞用戶動作。通過使用XMLHttpRequest對象,瀏覽器通過客戶端腳本與服務器交換數據,而Web頁面無須頻繁重新加載,Web頁面的內容由客戶端腳本動態更新。
異步是指基于Ajax的應用與服務器通信的方式。對于傳統的Web應用,每次用戶發送請求,向服務器請求獲得新數據時,瀏覽器都會完全丟棄當前頁面,而等待重新加載新的頁面。在服務器完全響應之前,用戶瀏覽器將是一片空白,用戶的動作必須中斷。而異步是用戶發送請求后,完全無須等待,請求在后臺發送,不會阻塞用戶當前活動,用戶無須等待第一次請求得到完全響應,即可發送第二次請求。
使用Ajax的異步模式,瀏覽器不必等用戶請求操作,無須重新下載整個頁面,一樣可以顯示服務器的響應數據。Ajax使用JavaScript傳送數據。XMLHttpRequest是Ajax的核心,JavaScript則是Ajax技術的黏合劑。整個Ajax應用的工作過程如下:
(1)JavaScript腳本使用XMLHttpRequest對象向服務器發送請求,既可以發送GET請求,也可以發送POST請求。
(2)JavaScript腳本使用XMLHttpRequest對象解析服務器響應數據。
(3)JavaScript腳本通過DOM動態更新HTML頁面。也可以為服務器響應數據增加CSS樣式表,在當前網頁的某個部分加以顯示。
1.3.2 Ajax的技術核心
XMLHttpRequest是整個Ajax技術的靈魂。可以說,沒有XMLHttpRequest,就沒有Ajax。Ajax技術的核心是異步發送請求,而XMLHttpRequest則是異步發送請求的對象。如果拋開異步發送請求,Ajax的其他技術將完全失去原有的意義。
最早應用XMLHTTP的是微軟。IE(IE5以上)允許在Web頁面內部使用XMLHttp ActiveX組件,從而擴展自身的功能,可以無須從當前Web頁面發送請求,而允許直接傳輸數據給服務器,并允許直接從服務器讀取數據。這個功能是很重要的,因為它減少了無狀態連接的痛苦,還可以避免下載冗余HTML代碼,從而提高進程的速度。
后來,Mozilla(Mozilla 1.0以上及Netscape Navigator 7以上)也有了自己的實現——XMLHttpRequest對象。Konqueror(還有Safari 1.2,同樣是基于KHTML的瀏覽器)也支持XMLHttpRequest對象。Opera在其7.6以后的版本中增加了對XMLHttpRequest的支持。
W3C(萬維網聯盟)于2012年7月再次發布了XMLHttpRequest Level 2的草案,XMLHttpRequest成為正式的異步傳輸規范。實際上,目前所有瀏覽器都已經支持最新的XMLHttpRequest規范。
1.3.3 Ajax的編程平臺
JavaScript是一種跨平臺的腳本語言。JavaScript簡單易用,而且在絕大部分瀏覽器中都運行良好。
JavaScript腳本是Ajax技術中的另一個重要部分,主要完成如下工作。
(1)創建XMLHttpRequest對象。
(2)通過XMLHttpRequest向服務器發送請求。
(3)創建回調函數,監視服務器響應狀態,在服務器響應完成后,回調函數啟動。
(4)回調函數通過DOM動態更新HTML頁面。
JavaScript是Ajax技術的黏合劑,通過將其他幾個技術有機地結合在一起而形成了Ajax技術。
1.3.4 Ajax的特征與優勢
1.異步發送請求
異步發送請求是Ajax應用最核心的內容。如果不具備異步發送請求這個特征,那么不管頁面做得多么豐富多彩,外表多么像桌面應用,也都不是Ajax應用。
Ajax應用的巨大改進之處在于給用戶的連續體驗。用戶發送請求后,還可以在當前頁面瀏覽,或者繼續發送請求,即使服務器響應還沒有完成;而服務器響應完成后,瀏覽器并不重新加載整個頁面,而僅加載需要更新的部分。
2.服務器響應的是數據,而不是頁面內容
與傳統的Web應用不同的是,服務器不再生成整個Web頁面。生成整個Web頁面是一種非常“浪費”的行為,這種浪費不僅對用戶不利,對服務器也是一樣。用戶從服務器完整下載了一個Web頁面,隨著服務器響應的到來,用戶再次重新下載新的頁面,也許這兩個頁面的基本內容完全一致,只有極個別的數據需要修改,但用戶不得不下載全部頁面,而服務器則不得不提供對應帶寬給用戶下載。
例如,對于一個實時的股票行情顯示系統,每隔一段時間就需要實時刷新股票行情。當前頁面的大部分內容如圖片、Flash動畫等都無須改變,甚至股票名稱的文字也無須改變,需要改變的僅僅是當前股票價格。在傳統的Web應用里,每隔一段時間都需要重復下載整個頁面,這將導致服務器負載加重,而用戶則處于一種不連續的體驗中。
而在Ajax應用中,網絡負載主要集中在應用加載期,也就是頁面第一次下載時。一旦頁面下載成功,則相當于在客戶端部署了復雜的應用。而后面的操作是相當迅速的,客戶端的JavaScript負責與服務器通信,從服務器獲取必須更新的部分數據,而不再是整個頁面內容。
3.瀏覽器中的是應用,不是簡單視圖
在傳統的Web應用中,瀏覽器只是簡單視圖,負責顯示系統狀態,并收集用戶信息交給服務器,瀏覽器沒有任何邏輯功能。當然,在傳統的Web應用中,也不允許瀏覽器中包含邏輯。因為如果在頁面中包含邏輯,則隨著用戶請求的提交,頁面被丟棄,所有的邏輯都將丟失。
在傳統的Web應用中,瀏覽器更不能包含用戶的會話狀態。而且如果將狀態保存在客戶端,則隨著頁面的刷新,用戶的會話狀態將丟失。
在Ajax應用中則完全不同,瀏覽器不僅可以包含簡單的邏輯,而且可以保存用戶會話狀態。因為Ajax應用有個特點,即無須刷新頁面即可完成內容的動態更新。
例如,一個簡單的在線購物系統,用戶的購物車就是典型的會話狀態。在傳統的Web應用里會采用session保存會話狀態,即將用戶的狀態信息保存在服務器端。每次用戶購買物品,都必須提交一次請求,從而將購買物品提交到服務器session中。而在Ajax應用中則無須使用session,而是采用JavaScript的變量保存用戶購買的所有物品信息;用戶每次購買的物品也無須提交給服務器session,而是直接修改瀏覽器中的JavaScript變量。在這種情況下,Web頁面既保存了用戶的狀態信息,又處理了部分業務邏輯。直到用戶提交購買,數據需要持久化時,JavaScript才將請求發送到服務器。
Ajax應用初始化時,需要加載大量的JavaScript代碼。這些JavaScript代碼中已經包含了部分業務邏輯,它將在后臺工作,負責處理部分邏輯、異步提交請求,以及讀取服務器響應數據,動態更新頁面。
- Easy Web Development with WaveMaker
- Kotlin Standard Library Cookbook
- C++ 從入門到項目實踐(超值版)
- Visual C#.NET程序設計
- Go語言底層原理剖析
- Secret Recipes of the Python Ninja
- Ext JS 4 Plugin and Extension Development
- LabVIEW數據采集
- 算法秘籍
- Java RESTful Web Service實戰
- 少兒編程輕松學(全2冊)
- Enterprise Application Architecture with .NET Core
- HTML5+CSS+JavaScript深入學習實錄
- PHP從入門到精通(第7版)
- C#程序設計基礎與實踐