您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關ajax請求過程以及請求方法的案例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
ajax 的全稱是Asynchronous JavaScript and XML,其中,Asynchronous 是異步的意思,它有別于傳統web開發中采用的同步的方式。據小編翻墻了解到,ajax很早就有了,只不過那時候都不用它,后來谷歌把它用在谷歌地圖上,人們感覺使用起來很方便,而且頁面不用刷新,用戶體驗非常好(那時候的網站也沒有什么用戶體驗^_^)
XMLHttpRequest是ajax的核心機制,它是在IE5中首先引入的,是一種支持異步請求的技術。簡單的說,也就是javascript可以及時向服務器提出請求和處理響應,而不阻塞用戶,達到頁面無刷新的效果
var xhr = new XMLHttpRequest() //IE瀏覽器使用var xhr = new ActiveXObject xhr.open('get', url, true) xhr.send(null) xhr.onreadystatechange = function () { if (xhr.readyState == 4) { if (xhr.status == 200) { success(xhr.responseText) } else { fail && fail(xhr.status) } } }
xhr.open()
第三個參數:true/fasle 默認值為true
false就是等待有返回數據的時候再繼續往下走,還沒有得到數據的時候就會卡在那里,直到獲取數據為止。
true就是不等待,直接返回,這就是所謂的異步獲取數據!
xhr.send
需要傳送的數據,接受一個字符串類型
xhr.onreadystatechange
每次狀態改變所都會觸發的事件處理程序
xhr.readyState有以下幾種狀態
0 請求未初始化,open方法尚未調用
1 服務器連接已建立,open方法已經調用,尚未調用send方法
2 請求已接收,也就是接收到頭信息了
3 請求處理中,也就是接收到響應主體了,這時因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤
4 請求已完成,數據接收完畢,此時可以通過通過responseXml和responseText獲取完整的回應數據
xhr.status常見HTTP狀態
0**:未被始化
1**:請求收到,繼續處理
2**:操作成功收到,分析、接受
3**:完成此請求必須進一步處理
4**:請求包含一個錯誤語法或不能完成
5**:服務器執行一個完全有效請求失敗
$.ajax({ url: '', Type: '', data: '', async:true, dataType: '', beforeSend: function(xhr) { xhr.setRequestHeader("Access-Toke"); }, success: function (data) { fn1() }, error: function (err) { error && error(err) } }) fn2()
success-函數
$.ajax中的success方法是否獲取成功的回調,jQuery判斷了以下幾種狀態,在源碼中有以下代碼(大概位置8193行)
isSuccess = status >= 200 && status < 300 || status === 304
304---通常的說法就是瀏覽器還有緩存,服務器告訴客戶,原來緩存的文檔還可以繼續使用
async-布爾值
async默認的設置值為true,這種情況為異步方式,就是說當ajax發送請求后,在等待server端返回的這個過程中,前臺會繼續 執行ajax塊后面的腳本,直到server端返回正確的結果才會去執行success,也就是說這時候執行的是兩個線程,ajax塊發出請求后一個線程 和ajax塊后面的腳本(另一個線程)
asyn設為false時,這時ajax的請求時同步的,也就是說,這個時候ajax塊發出請求后,他會等待在fn1()這個地方,不會去執行fn2(),知道fn1()部分執行完畢。
dataType--字符串
dataType可以指定以下值
xml:返回XML文檔,可用JQuery處理
html:返回純文本HTML信息;包含的script標簽會在插入DOM時執行
script:返回純文本JavaScript代碼。不會自動緩存結果。除非設置了cache參數。注意在遠程請求時(不在同一個域下),所有post請求都將轉為get請求
json:返回JSON數據
jsonp:JSONP格式。使用SONP形式調用函數時,例如myurl?callback=?,JQuery將自動替換后一個“?”為正確的函數名,以執行回調函數
text:返回純文本字符串
beforeSend--函數
送請求前可以修改XMLHttpRequest對象的函數,例如添加自定義HTTP頭。在beforeSend中如果返回false可以取消本次ajax請求。XMLHttpRequest對象是惟一的參數
優點 : 通過異步,提升用戶的體驗,減少不必要的數據往返,實現局部刷新
缺點 : 對搜索引擎支持比較弱
關于ajax請求過程以及請求方法的案例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。