AJAX的原理-如何做到非同步和區域性重新整理
Overriew: onReadyStateChange被回撥函式賦值,則能實現非同步呼叫,回撥函式直接操作DOM,則能實現區域性重新整理。那麼XMLHttpRequest的onReadyStateChange如何知道服務ready了呢?狀態如何change了呢(觀察者模式)?則是通過客戶端對服務的狀態詢問(定期輪詢)所實現的。
參考:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html
詳解:
1. XMLHttpRequest 負責與伺服器端的通訊,其內部有很多重要的屬性:readyStatus=4,status=200等等。當XMLHttpRequest
操作一般就是直接操作DOM,所以AJAX能做到所謂的“無重新整理”使用者體驗。
[javascript] view plain copy- document.getElementById("user1").innerHTML = "資料正在載入...";
- if (xmlhttp.status == 200) {
- document.write(xmlhttp.responseText);
- }
2. 那麼在AJAX客戶端如何做到的非同步呢?實際上就是Javascript的回撥函式起的作用
提供一個回撥JavaScript函式,一旦伺服器響應可用,該函式就被執行
業務函式:
[javascript] view plain copy- function castVote(rank) {
- var url = "/ajax-demo/static-article-ranking.html";
- var callback = processAjaxResponse;
- executeXhr(callback, url);
- }
需要非同步通訊的函式:[javascript]
- function executeXhr(callback, url) {
- // branch for native XMLHttpRequest object
- if (window.XMLHttpRequest) {
- req = new XMLHttpRequest();
- req.onreadystatechange = callback;
- req.open("GET", url, true);
- req.send()(null);
- } // branch for IE/Windows ActiveX version
- elseif (window.ActiveXObject) {
- req = new ActiveXObject("Microsoft.XMLHTTP");
- if (req) {
- req.onreadystatechange = callback;
- req.open("GET", url, true);
- req.send()();
- }
- }
- }
req.onreadystatechange = callback
req.open("GET", url, true)
第一行定義了JavaScript回撥函式,一旦響應就緒它就自動執行,而req.open()方法中所指定的“true”標誌說明想要非同步執行該請求。
一旦伺服器處理完XmlHttpRequest並返回給瀏覽器,使用req.onreadystatechange指派所設定的回撥方法將被自動呼叫。
回撥函式:
[javascript] view plain copy- function processAjaxResponse() {
- if (req.readyState == 4) {
- // only if "OK"
- if (req.status == 200) {
- document.getElementById("user1").innerHTML = req.responseText;
- } else {
- alert("There was a problem retrieving the XML data:
- " + req.statusText);
- }
- }
- }
Overriew: onReadyStateChange被回撥函式賦值,則能實現非同步呼叫,回撥函式直接操作DOM,則能實現區域性重新整理。那麼XMLHttpRequest的onReadyStateChange如何知道服務ready了呢?狀態如何change了呢(觀察者模式)?則是通過客戶端對服務的狀態詢問(定期輪詢)所實現的。
參考:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html
詳解:
1. XMLHttpRequest 負責與伺服器端的通訊,其內部有很多重要的屬性:readyStatus=4,status=200等等。當XMLHttpRequest的整體狀態並且保證它已經完成(readyStatus=4),即資料已經發送完畢。然後根據伺服器的設定詢問(類似於客戶端會輪詢伺服器的返回狀態,仍然是http短連線,並非長連線的伺服器端push)請求狀態,如果一切已經就緒(status=200),那麼就執行需要的操作。
操作一般就是直接操作DOM,所以AJAX能做到所謂的“無重新整理”使用者體驗。
[javascript] view plain copy- document.getElementById("user1").innerHTML = "資料正在載入...";
- if (xmlhttp.status == 200) {
- document.write(xmlhttp.responseText);
- }
2. 那麼在AJAX客戶端如何做到的非同步呢?實際上就是Javascript的回撥函式起的作用
提供一個回撥JavaScript函式,一旦伺服器響應可用,該函式就被執行
業務函式:
[javascript] view plain copy- function castVote(rank) {
- var url = "/ajax-demo/static-article-ranking.html";
- var callback = processAjaxResponse;
- executeXhr(callback, url);
- }
需要非同步通訊的函式:[javascript] view plain copy
- function executeXhr(callback, url) {
- // branch for native XMLHttpRequest object
- if (window.XMLHttpRequest) {
- req = new XMLHttpRequest();
- req.onreadystatechange = callback;
- req.open("GET", url, true);
- req.send()(null);
- } // branch for IE/Windows ActiveX version
- elseif (window.ActiveXObject) {
- req = new ActiveXObject("Microsoft.XMLHTTP");
- if (req) {
- req.onreadystatechange = callback;
- req.open("GET", url, true);
- req.send()();
- }
- }
- }
req.onreadystatechange = callback
req.open("GET", url, true)
第一行定義了JavaScript回撥函式,一旦響應就緒它就自動執行,而req.open()方法中所指定的“true”標誌說明想要非同步執行該請求。
一旦伺服器處理完XmlHttpRequest並返回給瀏覽器,使用req.onreadystatechange指派所設定的回撥方法將被自動呼叫。
回撥函式:
[javascript] view plain copy- function processAjaxResponse() {
- if (req.readyState == 4) {
- // only if "OK"
- if (req.status == 200) {
- document.getElementById("user1").innerHTML = req.responseText;
- } else {
- alert("There was a problem retrieving the XML data:
- " + req.statusText);
- }
- }
- }
轉載自:http://blog.csdn.net/fyxxq/article/details/22219361
相關推薦
AJAX的原理-如何做到非同步和區域性重新整理
Overriew: onReadyStateChange被回撥函式賦值,則能實現非同步呼叫,回撥函式直接操作DOM,則能實現區域性重新整理。那麼XMLHttpRequest的onReadyStateChange如何知道服務ready了呢?狀態如何change了呢(觀察者模式)
ajax實現分頁的區域性重新整理(基於Jeesite框架)
因為jeesite框架帶的分頁實現它的重新整理是整個jsp頁面的重新整理,所以這一點就很苦惱。下面我用ajax來解決這個問題。 點選分頁時觸發ajax事件,將後臺需要的引數通過ajax傳過去,然後後臺返回的資料再ajax裡畫的html部分顯示出來,主意你需要重新整理拿個部分
使用Ajax在HTML頁面中區域性重新整理頁面(左邊選單右邊頁面)
index.html<a href="javascript:void(0);" onclick="loadXMLDoc('member.html')">檢視使用者</a><div id="mainbody">歡迎登入!</div>
ionic頁面快取和區域性重新整理
最近兩天在做專案時,發現ionic的快取功能非常方便好用,提高了再低端手機特別是android比較低版本上的流暢性!可是,後來發現,整體的快取整個頁面並不是一個一勞永逸的辦法,結合區域性重新整理功能,感覺就完美極了!建議有一定的ionic基礎。 面, 1.根據想實現快
JS與Ajax實現非同步區域性重新整理的原理
function sendGet() { //開啟子執行緒的物件(需要考慮瀏覽器的相容性) var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行程式碼 xmlhttp=n
Ajax實現區域性重新整理和非同步處理簡單應用(實現簡單註冊驗證)
4.//從資料庫中查詢相應欄位並反饋給servlet 部分 @SuppressWarnings({ "unused", "null" }) public User find(String name){ List<Map<String,Object>> lists=new Arra
ajax非同步載入 實現區域性重新整理
這是用jquery進行資料互動<script type="text/javascript" src="${pageContext.request.contextPath }/js/jquery-2.1.0.js"></script> <scri
利用ajax和JSP技術實現網頁中表單的區域性重新整理(只重新整理表單資料,而不重新整理整個頁面)
在web開發中有時有區域性重新整理的需求,這樣做的好處是克服了頁面整體重新整理對網路速度受限的情況。 1.MySQL資料表如下(簡單舉例): 表名:stu_info stuId int PK NN
jQuery的區域性重新整理——get、post和ajax方法寫法小結
在前臺頁面的編寫中,為了考慮到業務的科學性和使用者的體驗性,常常需要驗證使用者的輸入資料是否合理有效。一般來講,普通的js即可以做到,但更多時候往往需要跟後臺進行互動。例如使用者註冊,判斷使用者所輸入的使用者名稱是否已經存在。下面用jQuery的get、post和ajax方法來實現判斷,同時對這三種常見的區
.Net MVC框架使用ajax做區域性重新整理
很基礎的內容加深一下自己的記憶力,下面就介紹一下,大神勿噴!: 下面是前臺的樣式: <style> .menu-panel dt a { background-colo
ajax非同步請求,生成表格,區域性重新整理
通過點選form的查詢按鈕,請求後臺資料,並生成表格新增到table中 先來一段簡單的html的form和table: <form onsubmit="return false" id="formAddtr" method="post">
extjs中Ext.Ajax.request同步請求和非同步請求
用Ext.Ajax.request請求預設是非同步請求,這就導致定義的物件無法識別,沒有定義,因此需要將請求方式改為同步。請看程式碼。 function showFormPanel(){ if(centerPanel.getSelectionModel().hasSelection()){
Ajax實現 頁面區域性 重新整理
web開發中我們經常會遇到區域性重新整理頁面的需求,以前我經常使用ajax和iframe實現區域性重新整理,後來做政府的專案,對頁面的樣式要求比較多,發現使用iframe控制樣式什麼的很麻煩,所以就採用了新的辦法,就是下面我們要說的ajax配合div區域性重新整理頁面,其實很簡單,下面我
解決ajax區域性重新整理後,滾動條位置變化的問題
問題描述:網頁底部實現了點贊和收藏功能,給長篇文點贊並更新點 贊數量之後,滾動條回到網頁頂部。 修改之前: <a href="#" th:onclick="'javascript:updateNum('+${article.id}+')'" > <i clas
js區域性重新整理和本地重新整理
1. 使用ajax進行區域性重新整理 $('#btn').click(function(){ var orderid = $(this).attr('data-order');//獲取訂單號 $.post(url,{orderid:orderid},func
js-關於非同步原理的理解和總結
我們經常說JS是單執行緒的,比如Node.js研討會上大家都說JS的特色之一是單執行緒的,這樣使JS更簡單明瞭,可是大家真的理解所謂JS的單執行緒機制嗎?單執行緒時,基於事件的非同步機制又該當如何,這些知識在《JavaScript權威指南》並沒有介紹,我也一直困惑了,
Ajax請求返回一個頁面,實現頁面區域性重新整理
本文實現Ajax的區域性重新整理。思路如下: 首先,從JSP頁面A.jsp向服務端發起一個Ajax請求,由Action中方法MethodA處理,該MethodA方法進行資料組裝後,返回一個jsp頁面Result.jsp,然後在Ajax的返回結果中,將Result.jsp元素
mui做的上拉重新整理和下拉載入和日期選擇器
var pageCount = 1;//頁碼 var date_inputs = document.getElementsByClassName('select_date'); var today = new Date(); var thisyear = today.getF
ajax提交和動態重新整理
$.get('http://52ivi.sh.1251443851.clb.myqcloud.com/chatman/msg_viewThis.do', {fid:dt[0],owner:dt[1],sort:dt[2],search:$('.search_i
jquery通過ajax在jsp中區域性重新整理頁面
在jquery中ajax的呼叫已經非常方便了。也提供了一些新的呼叫方式。 這裡有兩個 在jsp中區域性重新整理頁面 的例子。 一種是json返回內容再拼接 html 一種是直接返回 一個jsp 到另一個jsp中 這裡的框架用的是springMVC 其它框架 類推 js