簡(jiǎn)介
XMLHttpRequest、HTTP 工具原理、XHR
jQuery.ajax、axios 和 新的 Web API fetch 在瀏覽器不支持的兼容代碼都是利用
XMLHttpRequest 來完成網(wǎng)絡(luò)請(qǐng)求,今天一起來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 HTTP 請(qǐng)求客戶端 順便學(xué)習(xí)XMLHttpRequest 中較為常用的函數(shù)方法:
const http = ({ url, callback, data=null, method="GET", err = console.error, }) => { const request = new XMLHttpRequest(); request.open(method, url, true); request.setRequestHeader("Content-type", "application/json; charset=utf-8"); request.onerror = () => err(request); request.onload = () => callback(request.responseText); request.send(data ? JSON.stringify(data) : null); };代碼分析
函數(shù)為接受一個(gè)對(duì)象參數(shù),而不是像 (url, callback) 這樣的參數(shù)列表?因?yàn)槭褂脤?duì)象相對(duì)參數(shù)列表來說不用刻意的去記參數(shù)的順序只需要記住所需數(shù)據(jù):
小技巧:根據(jù)情況利用對(duì)象參數(shù)來代替參數(shù)列表。
const http = ({ url, callback, data=null, method="GET", err = console.error, }) => { // ... };
創(chuàng)建 XMLHttpRequest 對(duì)象并使用 XMLHttpRequest.open() 方法初始化一個(gè)請(qǐng)求(這里的 method 可以是 GET、POST、PUT、DELETE):
const request = new XMLHttpRequest(); request.open(method, url, true);
設(shè)置 Request Header 中的內(nèi)容類型:
request.setRequestHeader("Content-type", "application/json; charset=utf-8");
當(dāng)請(qǐng)求完成時(shí)利用 回調(diào)函數(shù) 來執(zhí)行外部傳入的代碼:
小技巧:善用用回調(diào)函數(shù)。
request.onerror = () => err(request); request.onload = () => callback(request.responseText);
發(fā)送需要帶上的數(shù)據(jù):
request.send(data ? JSON.stringify(data) : null);使用場(chǎng)景
手癢的同學(xué)可以開始動(dòng)手加上 Promise 或者按照 axios API 實(shí)現(xiàn)一個(gè)自己的 HTTP Client,好奇寶寶可以試試閱讀相關(guān) axios、fetch 源碼。下面給出幾個(gè)使用例子:
http({ method: "POST", url: "http://pushme.top/api/v1/posts", callback: console.log, data: { title: "hello", content: "hello world"} }) http({ method: "GET", url: "http://pushme.top/api/v1/posts", callback: console.log, })一起成長(zhǎng)
在困惑的城市里總少不了并肩同行的 伙伴 讓我們一起成長(zhǎng)。
如果您想讓更多人看到文章可以點(diǎn)個(gè) 點(diǎn)贊。
如果您想激勵(lì)小二可以到 Github 給個(gè) 小星星。
如果您想與小二更多交流添加微信 m353839115。
本文原稿來自 PushMeTop
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/110173.html
showImg(https://segmentfault.com/img/remote/1460000018808058?w=900&h=500); 簡(jiǎn)介 SEO、sitemap、搜索引擎優(yōu)化、簡(jiǎn)單教程 在曖昧期和暗戀期時(shí)心里總是懸掛著: ta 為什么還不和我表白? ta 是不是對(duì)我沒感覺? ta 是不是只是把我當(dāng)備胎? ta 是不是對(duì)誰都這樣? 解決問題最簡(jiǎn)單的方式就是直接 問問對(duì)方...
showImg(https://segmentfault.com/img/remote/1460000018793640?w=900&h=500); 簡(jiǎn)介 安全、注入攻擊、XSS 13歲女學(xué)生被捕:因發(fā)布 JavaScript 無限循環(huán)代碼。 這條新聞是來自 2019年3月10日 很多同學(xué)匆匆一瞥便滑動(dòng)屏幕去看下一條消息了,并沒有去了解這段代碼是什么,怎么辦才能防止這個(gè)問題。事情發(fā)生后為了抗議日本...
簡(jiǎn)介 數(shù)組、CSV、表格、工具 showImg(https://segmentfault.com/img/bVbp3L5?w=900&h=500); 我們之前的兩期 數(shù)組轉(zhuǎn) CSV 表格數(shù)據(jù) 和 JSON 對(duì)象數(shù)組轉(zhuǎn)換 CSV 表格數(shù)據(jù) 中學(xué)習(xí)了轉(zhuǎn)化為 CSV 表格數(shù)據(jù)的代碼片段,今天就講講 如何把 CSV 表格數(shù)據(jù)轉(zhuǎn)換為 JSON 對(duì)象: // 該源碼來自于 https://30secondso...
showImg(https://segmentfault.com/img/remote/1460000018771004?w=900&h=500); 簡(jiǎn)介 數(shù)組、CSV、表格、工具 將一個(gè)數(shù)組轉(zhuǎn)化為逗號(hào)為分割符的字符串(CSV)即表格數(shù)據(jù)。 // 該源碼來自于 https://30secondsofcode.org const arrayToCSV = (arr, delimiter = ,) =...
showImg(https://segmentfault.com/img/remote/1460000018825131); 簡(jiǎn)介 SEO、robot.txt、搜索引擎優(yōu)化 在浩海的互聯(lián)網(wǎng)世界中: 互聯(lián)網(wǎng) 宛如 宇宙 站點(diǎn) 宛如 星系 網(wǎng)頁 宛如 星球 網(wǎng)頁內(nèi)容 宛如 生靈萬物 而在互聯(lián)網(wǎng)世界漫游的搜索引擎爬蟲小蜘蛛,就好比一搜穿梭在宇宙里的星際漫游器,想想是不是還挺浪漫的。對(duì)于不同的星系有著...
閱讀 3265·2021-11-04 16:09
閱讀 3277·2021-09-23 11:49
閱讀 3763·2021-09-09 09:33
閱讀 3776·2021-08-18 10:22
閱讀 2114·2019-08-30 15:55
閱讀 3693·2019-08-30 15:53
閱讀 2724·2019-08-28 18:08
閱讀 958·2019-08-26 18:18