摘要:前端最基礎(chǔ)的就是。的原理瀏覽器發(fā)送請求,服務(wù)器給出響應(yīng)。保持之前的界面不變化。的核心創(chuàng)建一個對象,用于發(fā)起請求設(shè)置為請求,請求發(fā)送請求。
前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識的中心思想,我們開課啦(每周四)。
ajax 對于現(xiàn)在的前端來說已經(jīng)是一件必需品了。單頁應(yīng)用?前后端分離?遠(yuǎn)程搜索?異步加載?能做的功能太多了。
當(dāng)然,一直以來我們都是用一些封裝好的api去使用(jQuery.ajax 、axios)。今天我們就來了解原生的Ajax。
Asynchronous JavaScript + XML(異步JavaScript和XML), 其本身不是一種技術(shù),而是一個在 2005年被Jesse James Garrett提出的新術(shù)語,用來描述一種使用現(xiàn)有技術(shù)集合的‘新’方法,包括: HTML or XHTML, Cascading Style Sheets, JavaScript, The Document Object Model, XML, XSLT, 以及最重要的 XMLHttpRequest object。當(dāng)使用結(jié)合了這些技術(shù)的AJAX模型以后, 網(wǎng)頁應(yīng)用能夠快速地將增量更新呈現(xiàn)在用戶界面上,而不需要重載(刷新)整個頁面。這使得程序能夠更快地回應(yīng)用戶的操作。
盡管X在Ajax中代表XML, 但由于JSON的許多優(yōu)勢,比如更加輕量以及作為Javascript的一部分,目前JSON的使用比XML更加普遍。JSON和XML都被用于在Ajax模型中打包信息。
Ajax的原理瀏覽器發(fā)送請求 HttpRequest,服務(wù)器給出響應(yīng) HttpResponse。不同于正常打開頁面的是,Ajax通常使用的數(shù)據(jù)需要二次加工。
比如一首歌的歌曲信息,使用Ajax加載到之后,我們再通過一定的方式把數(shù)據(jù)顯示在頁面之上。
當(dāng)然,我們的html頁面,也是通過這樣的原理展示的,只不過是瀏覽器去拉,然后解析html,渲染給我們看。
Ajax的優(yōu)點(diǎn)速度更快。同等條件下,降低了流量,減少了無用數(shù)據(jù)的加載。
流量少。一個html和一個json那個更小,我就不說了吧。
保持之前的界面不變化。比如說驗(yàn)證碼,比如說異步加載等等。可以保留歷史的輸入。
Ajax的核心API
XMLHttpRequest
var xhr= new XMLHttpRequest(); 創(chuàng)建一個XHR對象,用于發(fā)起請求
xhr.open("GET", "https://www.lilnong.top/static/json/manifest.json"); 設(shè)置為GET請求,請求https://www.lilnong.top/stati...
xhr.send(); 發(fā)送請求。這個時候?yàn)g覽器會開啟一個線程去請求,回調(diào)函數(shù)會放在等待隊(duì)列中。
回調(diào)函數(shù)
onload
onerror
abort
onreadystatechange
Fetch
一個比 XHR 更新的 API。支持 Promise,簡直不要太爽。
fetch("https://www.lilnong.top/static/json/manifest.json") .then(response=>response.json()) .then(data=>console.log(data));XMLHttpRequest
之前我們已經(jīng)大體的了解一下XHR,下面我們深入的介紹一下。測試地址,可以點(diǎn)按鈕,然后看network中的請求
new 一個 XHR 對象new XMLHttpRequest();無參
老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 對象:new ActiveXObject("Microsoft.XMLHTTP");。話說兼容ie,還不用jquery的人很少吧。
使用 XHR 對象發(fā)送請求xhr = new XMLHttpRequest(); xhr.open("GET","https://www.lilnong.top/static/json/front-end.json",true); xhr.send();open(method,url,async)
設(shè)置一個請求
methods為請求類型。參數(shù)如 GET POST PUT DELETE HEAD
url為請求地址。
async。true(異步) false(同步)。
send(params)發(fā)送這個請求,如果是post的話,參數(shù)是body的內(nèi)容。get的話,需要帶在open的url上。
支持String
FormData
blob
設(shè)置請求頭 setRequestHeaderxhr.setRequestHeader(key,value);
通常有幾種情況我們需要設(shè)置。
上傳
setRequestHeader("Content-type","application/x-www-form-urlencoded");這樣設(shè)置等于砸場子。肯定不支持。
那么常用的Content-type有什么呢?分別對應(yīng)的數(shù)據(jù)是什么呢?留個作業(yè)吧(畢竟我之前寫過)
token 驗(yàn)證
一般名字都是自定義的。登錄的token。csrf 的 token。
一般來說就是拿到 response 來處理了。因?yàn)檫@些都是和后端協(xié)商好的。JSON、XML、或者其他數(shù)據(jù)。
可以返回ArrayBuffer、Blob、Document、DOMString,具體是哪種類型取決于XMLHttpRequest.responseType的值。
每當(dāng) readyState 改變時,就會觸發(fā) onreadystatechange 事件。標(biāo)明當(dāng)前XHR的狀態(tài),onreadystatechange 事件被觸發(fā) 4 次(0 - 4), 分別是: 0-1、1-2、2-3、3-4,對應(yīng)著 readyState 的每個變化。
0: 請求未初始化
1: 服務(wù)器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應(yīng)已就緒(status為返回的狀態(tài)碼)
onload 請求成功
onerror 請求失敗
onreadystatechange readyState 改變時
progress 下載進(jìn)度
.upload.progress 上傳進(jìn)度
ontimeout 超時
onabort 被終止
其他 屬性&方法timeout
unsigned long 即無符號長整型,表示該請求的最大請求時間(毫秒),超過該時間請求會自動結(jié)束。
withCredentials
Boolean,用來指定跨域的請求是否應(yīng)該使用證書(如cookie或授權(quán)header頭)。
.abort()
如果請求已經(jīng)被發(fā)送,則立刻中止請求.
.getResponseHeader()
返回包含指定響應(yīng)頭的字符串,如果響應(yīng)尚未收到或響應(yīng)中不存在該報(bào)頭,則返回null。
可以用來拿服務(wù)器時間
fetch --mdn,感興趣的可以去看看,我這里只簡單介紹。畢竟這個api還需要發(fā)展。
但是promise真的好爽。寫起來真的好短。支持的返回類型也好多。還有就是新的API基本都是想要跨平臺(想想axios)。
Window 和 WorkerGlobalScope 都實(shí)現(xiàn)了 WorkerOrGlobalScope。——這意味著基本在任何場景下只要你想獲取資源,都可以使用 位于 WorkerOrGlobalScope 中的 fetch() 方法。創(chuàng)建&發(fā)送
fetch(input[, init]);
input是你想要請求的資源。支持兩種類型
一個 USVString 字符串,包含要獲取資源的 URL。一些瀏覽器會接受 blob: 和 data: 作為 schemes.
一個 Request 對象。
init就是一些參數(shù)
method 請求使用的方法,如 GET、POST。
headers 請求的頭信息,形式為 Headers 的對象或包含 ByteString 值的對象字面量。
body 請求的 body 信息:可能是一個 Blob、BufferSource、FormData、URLSearchParams 或者 USVString 對象。注意 GET 或 HEAD 方法的請求不能包含 body 信息。
等等,還有好多,可以去MDN查看
HTTP response codes附上MDN原文地址,我只列舉一些常見的。
簡單來說分為五類
1xx 消息響應(yīng)
2xx 成功響應(yīng)
3xx 重定向
4xx 客戶端錯誤
5xx 服務(wù)器端錯誤
狀態(tài)碼 | 狀態(tài)描述 | 詳細(xì)描述 | 常見場景 |
---|---|---|---|
200 | OK (成功) | 請求成功.成功的意義根據(jù)請求所使用的方法不同而不同.GET: 資源已被提取,并作為響應(yīng)體傳回客戶端.HEAD: 實(shí)體頭已作為響應(yīng)頭傳回客戶端.POST: 經(jīng)過服務(wù)器處理客戶端傳來的數(shù)據(jù),適合的資源作為響應(yīng)體傳回客戶端.TRACE: 服務(wù)器收到請求消息作為響應(yīng)體傳回客戶端.PUT、DELETE、OPTIONS 方法永遠(yuǎn)不會返回 200 狀態(tài)碼. | 加載網(wǎng)頁,加載資源,加載成功,可以說最常見 |
206 | Partial Content (部分內(nèi)容) | 當(dāng)客戶端通過使用range頭字段進(jìn)行文件分段下載時使用該狀態(tài)碼 | 一般出現(xiàn)在大文件,比如MP4 |
301 | Moved Permanently (永久移動) | 該狀態(tài)碼表示所請求的URI資源路徑已經(jīng)改變,新的URL會在響應(yīng)的Location:頭字段里找到. | 用于永久移動,比如說http跳轉(zhuǎn)到https,比如想要更換域名。通常搜索引擎爬蟲抓到301會替換保存的資源地址。 |
302 | Found (臨時移動) | 該狀態(tài)碼表示所請求的URI資源路徑臨時改變,并且還可能繼續(xù)改變.因此客戶端在以后訪問時還得繼續(xù)使用該URI.新的URL會在響應(yīng)的Location:頭字段里找到 | 用于臨時重定向,比如登錄失效需要去登錄頁,比如作品目前在審核。 |
304 | Not Modified(未修改) | 告訴客戶端,所請求的內(nèi)容距離上次訪問并沒有變化. 客戶端可以直接從瀏覽器緩存里獲取該資源. | 一般就是js被緩存,css被緩存。當(dāng)然也有寫get請求數(shù)據(jù)接口也會緩存。 |
400 | Bad Request(錯誤請求) | 因發(fā)送的請求語法錯誤,服務(wù)器無法正常讀取. | 一般來說都是body數(shù)據(jù)異常,比如服務(wù)端要params,body里面是JSON |
401 | Unauthorized(未授權(quán)) | 需要身份驗(yàn)證后才能獲取所請求的內(nèi)容,類似于403錯誤.不同點(diǎn)是.401錯誤后,只要正確輸入帳號密碼,驗(yàn)證即可通過. | |
403 | Forbidden(禁止訪問) | 客戶端沒有權(quán)利訪問所請求內(nèi)容,服務(wù)器拒絕本次請求. | 通常都是token失效 |
404 | Not Found(未找到) | 服務(wù)器找不到所請求的資源.由于經(jīng)常發(fā)生此種情況,所以該狀態(tài)碼在上網(wǎng)時是非常常見的. | 接口未定義,資源不存在 |
500 | Internal Server Error (內(nèi)部服務(wù)器錯誤) | 服務(wù)器遇到未知的無法解決的問題. | |
501 | Implemented (未實(shí)現(xiàn)) | 服務(wù)器不支持該請求中使用的方法,比如POST 和 PUT.只有GET 和 HEAD 是RFC2616規(guī)范中規(guī)定服務(wù)器必須實(shí)現(xiàn)的方法. | |
502 | Bad Gateway (網(wǎng)關(guān)錯誤) | 服務(wù)器作為網(wǎng)關(guān)且從上游服務(wù)器獲取到了一個無效的HTTP響應(yīng). | |
503 | Service Unavailable (服務(wù)不可用) | 由于臨時的服務(wù)器維護(hù)或者過載,服務(wù)器當(dāng)前無法處理請求.這個狀況是臨時的,并且將在一段時間以后恢復(fù).如果能夠預(yù)計(jì)延遲時間,那么響應(yīng)中可以包含一個Retry-After:頭用以標(biāo)明這個延遲時間.如果沒有給出這個Retry-After:信息,那么客戶端應(yīng)當(dāng)以處理500響應(yīng)的方式處理它.同時,這種情況下,一個友好的用于解釋服務(wù)器出現(xiàn)問題的頁面應(yīng)當(dāng)被返回,并且,緩存相關(guān)的HTTP頭信息也應(yīng)該包含,因?yàn)橥ǔ_@種錯誤提示網(wǎng)頁不應(yīng)當(dāng)被客戶端緩存. | |
504 | Gateway Timeout (網(wǎng)關(guān)超時) | 服務(wù)器作為網(wǎng)關(guān)且不能從上游服務(wù)器及時的得到響應(yīng)返回給客戶端. |
前端培訓(xùn)-初級階段(17) - 數(shù)據(jù)存儲(cookie、session、stroage)
前端培訓(xùn)-初級階段(13) - 正則表達(dá)式
前端培訓(xùn)-初級階段(13) - 類、模塊、繼承
前端培訓(xùn)-初級階段(13) - ECMAScript (內(nèi)置對象、函數(shù))
前端培訓(xùn)-初級階段(13) - ECMAScript (語法、變量、值、類型、運(yùn)算符、語句)
前端培訓(xùn)-初級階段(13、18)
前端培訓(xùn)-初級階段(9 -12)
前端培訓(xùn)-初級階段(5 - 8)
前端培訓(xùn)-初級階段(1 - 4)
中級階段文章目錄前端培訓(xùn)-中級階段(2) - 事件(event) 事件冒泡、捕獲 - (2019-06-20期)
前端培訓(xùn)-中級階段(3) - DOM 文檔對象模型(2019-06-27期)
前端培訓(xùn)-中級階段(4)- BOM 瀏覽器對象模型(2019-07-04期)
前端培訓(xùn)-中級階段(5)- jQuery的概念與基本使用(2019-07-11期)
前端培訓(xùn)-中級階段(6)- jQuery元素節(jié)點(diǎn)操作(2019-07-18期)
前端培訓(xùn)-中級階段(7)- jQuery的事件綁定鏈?zhǔn)讲僮骷霸恚?019-07-25期)
前端培訓(xùn)-中級階段(8)- jQuery元素屬性樣式操作(2019-08-01期)
資料前端培訓(xùn)目錄、前端培訓(xùn)規(guī)劃、前端培訓(xùn)計(jì)劃
XMLHttpRequest
XMLHttpRequest.upload
XMLHttpRequest.readyState
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/54212.html
摘要:前端最基礎(chǔ)的就是。的原理瀏覽器發(fā)送請求,服務(wù)器給出響應(yīng)。保持之前的界面不變化。的核心創(chuàng)建一個對象,用于發(fā)起請求設(shè)置為請求,請求發(fā)送請求。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識的中心思想,我們開課啦(每周四)。 ajax ...
摘要:上節(jié)我們講了同源策略,這節(jié)我們講講如何跨域。當(dāng)這些從的腳本執(zhí)行出錯,因?yàn)檫`背了同源策略為了保證用戶信息不被泄露,錯誤信息不會顯示出來,取而代之只會返回一個。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識的中心思想,我們開課啦(每...
摘要:同源策略是什么同源策略是瀏覽器的一個安全功能,不同源的數(shù)據(jù)禁止訪問。或許你可以說驗(yàn)證,在瀏覽器沒有同源策略的情況下這些都可以繞過去。總結(jié)同源策略是蠻好的,防御了大部分的攻擊。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提升技術(shù)水平,打牢基礎(chǔ)知識的中心思...
摘要:前端最基礎(chǔ)的就是。前面我們已經(jīng)基本掌握常規(guī)的語法語義,以及基本的使用方法。等價于當(dāng)載入就緒執(zhí)行一個函數(shù)回調(diào)。返回一組匹配的元素。據(jù)提供的原始標(biāo)記字符串,動態(tài)創(chuàng)建由對象包裝的元素。同時設(shè)置一系列的屬性事件等。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(HTML/CSS/JS),本著提...
閱讀 996·2023-04-25 14:45
閱讀 2772·2021-09-30 09:59
閱讀 3114·2021-09-22 15:48
閱讀 2425·2019-08-30 15:55
閱讀 3467·2019-08-30 15:44
閱讀 535·2019-08-29 14:07
閱讀 3412·2019-08-26 13:45
閱讀 536·2019-08-26 11:31