關於AJAX的原理如何做到異步和局部刷新實現代碼的介紹
Overriew: onreadyStateChange被回調函數賦值,則能實現異步調用,回調函數直接操作DOM,則能實現局部刷新。那麼XMLHttpRequest的onReadyStateChange如何知道服務ready了呢?狀態如何change了呢(觀察者模式)?則是通過客户端對服務的狀態詢問(定期輪詢)所實現的。
詳解:
1. XMLHttpRequest 負責與服務器端的通訊,其內部有很多重要的屬性:readyStatus=4,status=200等等。當XMLHttpRequest的整體狀態並且保證它已經完成(readyStatus=4),即數據已經發送完畢。然後根據服務器的設定詢問(類似於客户端會輪詢服務器的返回狀態,仍然是http短連接,並非長連接的`服務器端push)請求狀態,如果一切已經就緒(status=200),那麼就執行需要的操作。
操作一般就是直接操作DOM,所以AJAX能做到所謂的“無刷新”用户體驗。
lementById("user1")rHTML = "數據正在加載..."; if (us == 200) { e(onseText); }
2. 那麼在AJAX客户端如何做到的異步呢?實際上就是Javascript的回調函數起的作用
提供一個回調JavaScript函數,一旦服務器響應可用,該函數就被執行
業務函數:
function castVote(rank) { var url = "/ajax-demo/"; var callback = processAjaxResponse; executeXhr(callback, url);}需要異步通訊的函數: function executeXhr(callback, url) { // branch for native XMLHttpRequest object if (ttpRequest) { req = new XMLHttpRequest(); adystatechange = callback; ("GET", url, true); ()(null); } // branch for IE/Windows ActiveX version else if (veXObject) { req = new ActiveXObject("TTP"); if (req) { adystatechange = callback; ("GET", url, true); ()(); } }}adystatechange = ("GET", url, true)
第一行定義了JavaScript回調函數,一旦響應就緒它就自動執行,而()方法中所指定的“true”標誌説明想要異步執行該請求。
一旦服務器處理完XmlHttpRequest並返回給瀏覽器,使用adystatechange指派所設置的回調方法將被自動調用。
回調函數:
function processAjaxResponse() { if (yState == 4) { // only if "OK" if (us == 200) { lementById("user1")rHTML = onseText; } else { alert("There was a problem retrieving the XML data:" + usText); } }}
-
網頁設計10大靈感來源介紹
不僅僅只有網頁設計能激發我們創建出色網站的動力,幾乎我們身邊的任何事都會有此作用。以下是本站小編搜索整理的關於網頁設計10大靈感來源介紹,供參考借鑑,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!自然圖01圖02思考設計的最佳場所...
-
javascript中setInterval的用法總結
javascript中的setInterval的函數主要是在製作動畫或其他間隔性渲染(操作)效果時,對操作方法按照一定時間間隔進行調用的函數。setInterval的表達式格式主要有:setInterval(fnname,time,par1,par2,);setInterval(obj,fnname,time,par1,par2,);第一種是最常見的表達...
-
網頁設計很糟糕的10個原因
個好的網頁設計,不僅吸引眼球,也是實用的、直觀的、層級簡單卻足夠複雜到保持用户的興趣。但是不好的網頁設計是由很多原因造成的,下面是關於網頁設計很糟糕的10個原因,歡迎閲讀了解!沒有足夠的空白空白可以説是設計中最重要的一部分。它有助於防止用户在瀏覽網站時...
-
如何理解Javascript的caller,callee,call,apply區別
在提到上述的概念之前,首先想説説javascript中函數的隱含參數:argumentsarguments該對象代表正在執行的函數和調用它的函數的參數。[function.]arguments[n]參數function:選項。當前正在執行的Function對象的名字。n:選項。要傳遞給Function對象的從0開始的參數值...