當前位置:
首頁 > 最新 > 朗沃教育:30分鐘全面解析-圖解AJAX原理

朗沃教育:30分鐘全面解析-圖解AJAX原理

背景:

1.傳統的Web網站,提交表單,需要重新載入整個頁面。

2.如果伺服器長時間未能返回Response,則客戶端將會無響應,用戶體驗很差。

3.服務端返回Response後,瀏覽器需要載入整個頁面,對瀏覽器的負擔也是很大的。

4.瀏覽器提交表單後,發送的數據量大,造成網路的性能問題。

問題:1.如何改進?

2.AJAX是什麼?

3.有什麼優勢?

4.有什麼缺點?

一、什麼是 AJAX

1.為什麼需要AJAX當需要從伺服器獲取數據,並刷新頁面的操作,如果不採用AJAX,則需要用提交整個表單的方式,當提交表單時,發送請求給伺服器,頁面需要等待伺服器發送完response後,頁面才能恢復操作。

2.AJAX的概念:1.AJAX = 非同步 JavaScript 和 XML。

2.AJAX 是一種用於創建快速動態網頁的技術。

3.通過在後台與伺服器進行少量數據交換,可以使網頁實現非同步更新。

4.可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。

3.什麼叫非同步當前頁面發送一個請求給伺服器,當前頁面不需要等待伺服器響應才能操作網頁。發送完請求之後,當前頁面可以繼續瀏覽,操作。

4.什麼叫局部刷新我們可以用兩種方式來實現部分刷新。

1. iframe頁面重載的方式。

這種方式雖然實現了部分刷新,但是是頁面的重載,所以也會帶來性能上的問題。

Step1.在頁面中定義一個Iframe

+ View Code

Step2.設置Iframe的src

Step3.添加一個button的點擊事件,當點擊這個button時,重新設置Iframe的src,實現iframe裡面的頁面刷新。Iframe外面的內容不刷新。

通過這種方式我們可以實現一個導航欄的功能:

2.AJAX方式

Step1.JavaScrpit發送非同步請求

Step2.服務端查詢資料庫,返回數據

Step3.服務端返回Response

Step4.客戶端根據返回的Response,來用JavaScript操作DOM。

看下面的例子:

當我們切換DropDownList中的Item時,JavaScript發送非同步請求給Server端,Server端返回數據,然後JavaScript將數據解析出來,拼接了一個Table,將Table呈現在頁面上。

回到頂部

二、提交Form表單的原理

1.代碼

客戶端代碼:

"form1" action="Test.ashx" method="get">

您的姓名1:"text" name="fname" size="20" />

"submit" name="submit" value="Sumbit">

服務端代碼:

public void ProcessRequest (HttpContext context)

{

//Delay

for (int i = 0; i

{

System.Threading.Thread.Sleep(1000);

}

//從Requset.Form中獲取fname的值。使用Form獲取請求的鍵值對的值的前提條件是HTTP request Content-Type 值必須是"application/x-www-form-urlencoded" 或 "multipart/form-data".

string fname = context.Request["fname"];

context.Response.ContentType = "text/plain";

//將字元串寫入 HTTP 響應輸出流。

context.Response.Write("Hello World " + fname);

}

2.將代碼部署到IIS

3.打開站點:

http://localhost:8003/Test.html

4.輸入「Jackson0714」然後點擊Sumbit按鈕,頁面會重新刷新,顯示"Hello World Jackson0714"

5.提交Form表單後,頁面發送請求和服務端返迴響應的流程

6.通過抓包,我們可以得到HTTP Headers瀏覽器發送HTTP給服務端,採取的協議是HTTP協議。

在傳輸過程中,我們可以看下HTTP Headers。

三、AJAX提交請求和服務響應的原理

1.代碼

客戶端HTML代碼:

+ View Code

客戶端JS代碼:

這裡有一點需要注意

var xmlhttp = createRequest();

1.讓服務端能夠操作這個變數,如果定義成局部變數,則服務端返回response時,不能對xmlhttp的屬性賦值。回調函數要求request是全局的,才能訪問這個變數和它的屬性值。

2.定義成全局變數後,可能出現兩個請求或多個請求共享同一個請求對象。而這個請求對象只能存放一個回調函數來處理伺服器響應。當伺服器返回兩個請求的Response後,可能會調用後指定的回調函數。所以可能有兩個完全不同的伺服器響應由同一個回調函數處理,而這可能並不是正確的處理。解決辦法是創建兩個不同的請求對象。

服務端代碼不變。

2.輸入「Jackson0714」然後點擊Sumbit按鈕,頁面不會刷新,在最下面顯示"Hello World Jackson0714"

5.AJAX發送請求和服務端返迴響應的流程

6.通過抓包,我們可以得到HTTP Headers瀏覽器發送HTTP給服務端,採取的協議是HTTP協議。

在傳輸過程中,我們可以看下HTTP Headers:

7.AJAX GET和POST方式區別AJAX發送請求和POST發送請求的代碼如下:

//GET方式

function testGet() {

var fname = document.getElementByIdx_x("testGetName").value;

xmlhttp.open("GET", "Test.ashx?fname=" + fname + "&random=" + Math.random() , true);

xmlhttp.onreadystatechange = callback;

xmlhttp.send(null);

}

//POST方式

function testPost() {

var fname = document.getElementByIdx_x("testPostName").value;

xmlhttp.open("POST", "Test.ashx?" + "&random=" + Math.random() , true);

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

xmlhttp.onreadystatechange = callback;

xmlhttp.send("fname="+fname);

}

1.請求的URL中,POST方式可以添加鍵值對,也可以不添加

2.GET方式中,send方法傳遞值無效。對於IE瀏覽器可以忽略send()方法的參數。但是對於FireFox,必須提供一個null引用,否則回調行為將不規律。這是在編寫客戶端腳本時你會發現的一個跨瀏覽器兼容的問題。

3.POST 可以用send方法發送額外信息。發送的信息存放在content中

4.Post方式需要指定Request Header的類型。Get方式不需要指定。

5.GET方式將參數暴露在URL中,POST不暴露。

四、XMLHttpRequest 對象的知識

1.XMLHttpRequest 對象的方法方 法描 述

2.XMLHttpRequest 對象的屬性 屬 性描 述

五、JQuery實現AJAX

下面的代碼實現了當切換DropDownList的item時,觸發getWeeklyCalendar方法,用JQuery的類庫方法$.ajax來發送AJAX請求。

客戶端JQuery代碼

+ View Code

後台成功返回Response後,執行paintWeeklyCandler(data)方法

後台PHP代碼

+ View Code

六、優勢

1.使用非同步方式與伺服器通信,頁面不需要重新載入,頁面無刷新

2.按需取數據,減少伺服器的負擔

3.使得Web應用程序更為迅捷地響應用戶交互

4.AJAX基於標準化的並被廣泛支持的技術,不需要下載瀏覽器插件或者小程序,但需要客戶允許JavaScript在瀏覽器上執行

5.瀏覽器的內容和服務端代碼進行分離。頁面的內容全部由JAVAScript來控制,服務端負責邏輯的校驗和從資料庫中拿數據。

七、缺點

1.安全問題:將服務端的方法暴露出來,黑客可利用這一點進行攻擊

2.大量JS代碼,容易出錯

3.Ajax的無刷新重載,由於頁面的變化沒有刷新重載那麼明顯,所以容易給用戶帶來困擾——用戶不太清楚現在的數據是新的還是已經更新過的;現有的解決有:在相關位置提示、數據更新的區域設計得比較明顯、數據更新後給用戶提示等

4.可能破壞瀏覽器後退按鈕的正常行為;

5.一些手持設備(如手機、PAD等)自帶的瀏覽器現在還不能很好的支持Ajax

八、應用場景

1.對數據進行過濾和操縱相關數據的場景

2.添加/刪除樹節點

3.添加/刪除列表中的某一行記錄

4.切換下拉列表item

5.註冊用戶名重名的校驗

九、不適用場景

1.整個頁面內容的保存

2.導航


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 成都朗沃教育 的精彩文章:

TAG:成都朗沃教育 |

您可能感興趣

全面解析:NIKE PG2 實戰測評
小米MIX 2S宣傳圖曝光:全面屏3.0
全面解析哈登場均30.4分領跑全聯盟!
傳諾基亞7 Plus亮相MWC 驍龍660/全面屏
vivo 全面屏概念機 APEX 宣傳片:消除劉海和下巴,屏佔比接近 100% | MWC 2018
HUAWEI mate 10,萊卡雙攝+全面屏+AI智能
A14處理器+全面屏,iPhone 12概念圖首曝
4K高清全面屏麒麟980 華為MateX概念美圖爆表
26號見真章!vivo官宣概念機APEX:100%屏佔比真全面屏
小米6X概念美圖:18:9全面屏+iPhoneX同款雙攝
日本2018年科技大預測:AI、AR、VR 全面爆發
小米MIX2S:全面屏3.0,MWC見
全面了解iOS 11.3Beta 2全新「電池健康」功能
全面屏3.0 小米MIX2s官方海報泄露 驍龍845+8GB 紅米Note5匯總
索尼Xperia XZ2 Pro曝光 配4K 18:9全面屏
vivo Y71圖賞:全面屏設計+Jovi AI
0308韓娛-EXO小分隊EXO-CBX將於4月全面回歸等更多資訊
8.4AP裝備全面解析 教你秒懂AP如何出裝
努比亞Z18 mini:全面屏三攝+驍龍660AIE+北斗導航,僅售1799!
AI加持 雙攝更清晰 小米MIX 2S 全面解析