摘要:實現(xiàn)局部刷新的原理是通過對象來向服務器發(fā)送異步請求,通過操作相應的來更新頁面。在以及都內(nèi)建了對象,但是和是使用對象。參考文章同源策略及其規(guī)避方法詳解技術(shù)原理
前言
?我們在請求數(shù)據(jù)的時候,往往會使用到ajax,而且一般都是通過引入jQuery庫,再使用。但是,如果我們想直接使用ajax怎么辦呢,這個時候就可以自己寫一個ajax,剛一聽可能會覺得很難,但是看完我的文章后你肯定就會覺得原來這么簡單~
正文 Ajax介紹?想象一個場景,你在淘寶上看中一件物品,想加入購物車,但是呢,你點擊添加購物車后,整個頁面刷新了,你之前看的物品記錄也沒有了,這樣是不是很煩(這是因為沒有使用ajax更新數(shù)據(jù)時,會請求整個頁面的數(shù)據(jù),重新渲染)。
?碰到這種情況,ajax就出場了,有了它,我們可以在點擊添加商品后,只更新購物車中的物品數(shù)量就可以了,根本就不需要更新整個頁面,用官方一點的話來說,就是可以控制網(wǎng)頁的局部刷新。
?ajax實現(xiàn)局部刷新的原理是通過XmlHttpRequest對象來向服務器發(fā)送異步請求,通過js操作相應的DOM來更新頁面。
Ajax實現(xiàn)過程?ajax實現(xiàn)異步請求的過程可以分為以下幾個步驟:
創(chuàng)建XmlHttpRequest對象
初始化參數(shù)
發(fā)送信息
接收信息
?從上面的介紹可以看出,ajax請求的核心在于XmlHttpRequest對象,所以了解了XmlHttpRequest的機制就相當于知道了ajax的執(zhí)行過程。
?在Chrome,Firefox,Opera,Safari以及IE7+都內(nèi)建了XmlHttpRequest對象,但是IE5和IE6是使用ActiveX對象。
?方法:
abort(): 取消現(xiàn)在的連接,可以將XmlHttpRequest對象的狀態(tài)值重置為0
open(): 初始化http的請求參數(shù),但是不發(fā)送請求
send(): 發(fā)送http請求
setRequestHeader():給一個打開但是未發(fā)送的請求設(shè)置參數(shù)
?屬性:
onreadystateChange: 狀態(tài)改變觸發(fā)的回調(diào)函數(shù)
reposeText: 從服務器返回數(shù)據(jù)的字符串格式
reposeXML: 從服務器返回兼容DOM的文檔數(shù)據(jù)對象
status: 從服務器返回的狀態(tài)碼
statusText: 伴隨狀態(tài)碼返回的信息,如status=200時,statusText="OK"
readyState: 對象狀態(tài)值
0表示XmlHttpRequest對象已創(chuàng)建或者已經(jīng)被abort()方法重置 1表示對象已經(jīng)初始化,但是請求還未發(fā)送(調(diào)用了open()方法,send()方法還沒有調(diào)用) 2表示請求已經(jīng)發(fā)送,沒有接收到響應信息(sed()方法已經(jīng)被調(diào)用) 3表示已經(jīng)接收到了所有的響應頭,響應體開始接收但未完成 4表示響應信息已經(jīng)全部接收問題: http狀態(tài)碼(status)和對象的狀態(tài)值(readyState)有什么區(qū)別?
回答:http狀態(tài)碼是指服務器接收到請求后返回的一個狀態(tài)碼,其中比較常見的是200(請求成功),404(請求失?。?,500(服務器發(fā)生錯誤),更多參考這里;而對象狀態(tài)值,是針對XmlHttpRequest對象的,前面已經(jīng)解釋了每個狀態(tài)值代表的含義;它們倆之間的聯(lián)系就是只有當請求過程全部完成后,才可以根據(jù)服務器返回的狀態(tài)碼調(diào)用不同的函數(shù)。
Ajax請求過程的代碼實現(xiàn)//封裝一個ajax請求 function ajax(options){ //創(chuàng)建XMLHttpRequest對象 if(window.XMLHttpRequest){ var xhr = new XMLHttpRequest }else{ var xhr = new ActiveXObject() } //初始化參數(shù)的內(nèi)容 options = options ||{} options.type = (options.type ||"GET").toUpperCase() options.dataType = options.dataType || "json" var params = options.data //發(fā)送請求 if(options.type == "GET"){ xhr.open("GET",options.url + "?" + params,true) xhr.send(null) }else if(options.type == "POST"){ xhr.open("POST",options.url,true) xhr.send(params) // xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")//規(guī)定輸出為鍵值對的形式 } //接收請求 xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ var status = xhr.status if (status >= 200 && status < 300){ options.success && options.success(xhr.responseText,xhr.responseXML) }else{ options.fail &&options.fail(status) } } } } ajax({ type: "post", dataType: "json", data: {}, url: "https://www.easy-mock.com/mock/5bbd92e0004caf3b6a68db6f/example/api/countEventsLevel", success: function(text,xml){//請求成功后的回調(diào)函數(shù) console.log(text) }, fail: function(status){////請求失敗后的回調(diào)函數(shù) console.log(status) } })總結(jié)
?其實與ajax請求相關(guān)的知識點很多,比如它的核心XmlHttpRequest對象,跨域問題等。由于本文中的重點在于手動實現(xiàn)ajax請求,所以這些內(nèi)容暫時先不涉及,不過我會在文后將參考鏈接奉上,感興趣的可以看看。
參考文章同源策略及其規(guī)避方法
XmlHttpRequest詳解
ajax技術(shù)原理
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/99487.html
摘要:拿到秋招的同學,如確定入職需與用人單位簽署三方協(xié)議,以保證雙方的利益不受損失。當然每個崗位所要求的側(cè)重點不同,但卻百變不離其宗。方法論要想達成某個目標都有其特定的方法論,學習技術(shù)也不例外,掌握適當?shù)膶W習方法才能事半功倍。 寫在前面的話 筆者從17年的2月份開始準備春招,其中遇到不少坑,也意識到自己走過的彎路。故寫了這篇文章總結(jié)一番,本文適合主動學習的,對自己要學的課程不明確的,對面試有...
摘要:拿到秋招的同學,如確定入職需與用人單位簽署三方協(xié)議,以保證雙方的利益不受損失。當然每個崗位所要求的側(cè)重點不同,但卻百變不離其宗。方法論要想達成某個目標都有其特定的方法論,學習技術(shù)也不例外,掌握適當?shù)膶W習方法才能事半功倍。 寫在前面的話 筆者從17年的2月份開始準備春招,其中遇到不少坑,也意識到自己走過的彎路。故寫了這篇文章總結(jié)一番,本文適合主動學習的,對自己要學的課程不明確的,對面試有...
摘要:主講人黎騰年加入騰訊,技術(shù)面試官引入面試是一個讓面試官認識你的過程,盡全力展現(xiàn)的你就好,正常發(fā)揮沒通過再接再厲,失常發(fā)揮沒通過實為遺憾要求要求找準定位,重視基礎(chǔ)前端發(fā)展日新月異,打牢基礎(chǔ)原生,才能以不變應萬變?nèi)缧阅?,安全要求用更遠的視角去看 主講人:黎騰(Litten):13年加入騰訊, 技術(shù)面試官 1.引入 面試是一個讓面試官認識你的過程,盡全力展現(xiàn)100%的你就好,正常發(fā)揮沒通過...
摘要:主講人黎騰年加入騰訊,技術(shù)面試官引入面試是一個讓面試官認識你的過程,盡全力展現(xiàn)的你就好,正常發(fā)揮沒通過再接再厲,失常發(fā)揮沒通過實為遺憾要求要求找準定位,重視基礎(chǔ)前端發(fā)展日新月異,打牢基礎(chǔ)原生,才能以不變應萬變?nèi)缧阅?,安全要求用更遠的視角去看 主講人:黎騰(Litten):13年加入騰訊, 技術(shù)面試官 1.引入 面試是一個讓面試官認識你的過程,盡全力展現(xiàn)100%的你就好,正常發(fā)揮沒通過...
摘要:主講人黎騰年加入騰訊,技術(shù)面試官引入面試是一個讓面試官認識你的過程,盡全力展現(xiàn)的你就好,正常發(fā)揮沒通過再接再厲,失常發(fā)揮沒通過實為遺憾要求要求找準定位,重視基礎(chǔ)前端發(fā)展日新月異,打牢基礎(chǔ)原生,才能以不變應萬變?nèi)缧阅?,安全要求用更遠的視角去看 主講人:黎騰(Litten):13年加入騰訊, 技術(shù)面試官 1.引入 面試是一個讓面試官認識你的過程,盡全力展現(xiàn)100%的你就好,正常發(fā)揮沒通過...
閱讀 2763·2021-09-24 09:47
閱讀 4382·2021-08-27 13:10
閱讀 3032·2019-08-30 15:44
閱讀 1302·2019-08-29 12:56
閱讀 2605·2019-08-28 18:07
閱讀 2627·2019-08-26 14:05
閱讀 2587·2019-08-26 13:41
閱讀 1278·2019-08-26 13:33