当前位置:网站首页>Axios learning notes (2): easy to understand the use of XHR and how to package simple Axios
Axios learning notes (2): easy to understand the use of XHR and how to package simple Axios
2020-11-06 20:42:00 【Tell me Zhan to hide】
Use
XMLHttpRequest(XHR) Objects can interact with the server . You can learn from URL get data , And without having to refresh the entire page . This allows the web page to update the local content of the page without affecting the user's operation . stay AJAX Programming ,XMLHttpRequestHeavily used .

List of articles
1. understand XHR
- Use XMLHttpRequest(XHR) Objects can interact with the server , That is, sending ajax request
- The front end can get data , And without having to refresh the entire page
- This makes Web Pages can only update parts of the page , And not affect the user's operation
The difference is general http Ask for something to do with ajax request
- ajax Requests are special http request
- For the server side , It doesn't make any difference , The difference is on the browser side
- The browser sends a request : Only XHR or fetch That's what's coming out ajax request , All other requests are true and wrong ajax request
- The browser side receives a response
- (1) General request : Browsers generally display the response data directly , That is, refresh, as we often call it / Jump to the page
(2) ajax request : The browser does not update the interface , Just call the monitored callback Function and pass in response correlation number
3. API
-
XMLHttpRequest(): establish XHR Object's constructor
-
status: Response status code value , such as 200,404
-
statusText: Response status text
-
readyState: Read only property that identifies the status of the request
0: initial <br /> 1: open() after <br /> 2: send() after <br /> 3: In request <br /> 4: Request completed -
onreadystatechange: binding readyState Change monitoring
-
responseType: Specify the corresponding data , If it is ’json’, After the response is obtained, the response body data will be automatically parsed
-
response: Response body data , The type depends on responseType The specified
-
timeout: Specify the request timeout , The default is 0 There is no limit
-
ontimeout: Binding timeout monitoring
-
onerror: Binding requests network error monitoring
-
open(): Initialize a request , Parameter is : (method, url[, async])
-
send(data): Send a request
-
abort(): Interrupt request
-
getResponseHeader(name): Gets the response header value for the specified name
-
getAllResponseHeaders(): Gets the string of all response headers
16. setRequestHeader(name, value): Set request header
4. XHR Of ajax encapsulation , It's also a simple version of axios
4.1 characteristic
- The return value of the function promise, The result of success is response, The abnormal result is error
- Can handle multiple types of requests :GET/POST/PUT/DELETE
- The parameter of the function is a configuration object
{
url: '', // Request address
method: '', // Request mode GET/POST/PUT/DELETE
params: {
}, // GET/DELETE Requested query Parameters
data: {
}, // POST or DELETE Requested body parameter
}
- Respond to json Data is automatically parsed to js The object of / Array
4.2 A simple version of axios Source code
function axios({
url,
method='GET',
params={
},
data={
}
}) {
// Return to one promise object
return new Promise((resolve, reject) => {
// Handle method( Turn capitalization )
method = method.toUpperCase()
// Handle query Parameters ( Joining together to url On ) id=1&xxx=abc
/* { id: 1, xxx: 'abc' } */
let queryString = ''
Object.keys(params).forEach(key => {
queryString += `${ key}=${ params[key]}&`
})
if (queryString) {
// id=1&xxx=abc&
// Remove the last &
queryString = queryString.substring(0, queryString.length-1)
// Receive url
url += '?' + queryString
}
// 1. Asynchronous execution ajax request
// establish xhr object
const request = new XMLHttpRequest()
// Open the connection ( Initialization request , No request )
request.open(method, url, true)
// Send a request
if (method==='GET' || method==='DELETE') {
request.send()
} else if (method==='POST' || method==='PUT'){
request.setRequestHeader('Content-Type', 'application/json;charset=utf-8') // Tell the server that the format of the requester is json
request.send(JSON.stringify(data)) // send out json Format requester parameters
}
// Monitoring of binding state changes
request.onreadystatechange = function () {
// If the request is not completed , End directly
if (request.readyState!==4) {
return
}
// If the response status code is [200, 300) Between represents success , Otherwise failure
const {
status, statusText} = request
// 2.1. If the request succeeds , call resolve()
if (status>=200 && status<=299) {
// Prepare the result data object response
const response = {
data: JSON.parse(request.response),
status,
statusText
}
resolve(response)
} else {
// 2.2. If the request fails , call reject()
reject(new Error('request error status is ' + status))
}
}
})
}
版权声明
本文为[Tell me Zhan to hide]所创,转载请带上原文链接,感谢
边栏推荐
- How about small and medium-sized enterprises choose shared office?
- Even liver three all night, jvm77 high frequency interview questions detailed analysis, this?
- 使用 Iceberg on Kubernetes 打造新一代雲原生資料湖
- C語言I部落格作業03
- Azure data factory (3) integrate azure Devops to realize CI / CD
- DRF JWT authentication module and self customization
- 面试官: ShardingSphere 学一下吧
- 意派Epub360丨你想要的H5模板都在这里,电子书、大转盘、红包雨、问卷调查……
- Git rebase is in trouble. What to do? Waiting line
- Analysis of serilog source code -- how to use it
猜你喜欢

【学习】接口测试用例编写和测试关注点

(1) ASP.NET Introduction to core3.1 Ocelot

代码生成器插件与Creator预制体文件解析

What is the purchasing supplier system? Solution of purchasing supplier management platform

What are the common problems of DTU connection

新建一个空文件占用多少磁盘空间?

Outsourcing is really difficult. As an outsourcer, I can't help sighing.

大会倒计时|2020 PostgreSQL亚洲大会-中文分论坛议程安排

【自学unity2d传奇游戏开发】地图编辑器
![Tron smart wallet PHP development kit [zero TRX collection]](/img/3b/00bc81122d330c9d59909994e61027.jpg)
Tron smart wallet PHP development kit [zero TRX collection]
随机推荐
Individual annual work summary and 2019 work plan (Internet)
Interpretation of Cocos creator source code: engine start and main loop
(2) ASP.NET Core3.1 Ocelot routing
python100例項
Cglib 如何实现多重代理?
Even liver three all night, jvm77 high frequency interview questions detailed analysis, this?
The method of realizing high SLO on large scale kubernetes cluster
FastThreadLocal 是什么鬼?吊打 ThreadLocal 的存在!!
For a while, a dynamic thread pool was created, and the source code was put into GitHub
How to understand Python iterators and generators?
PHP application docking justswap special development kit【 JustSwap.PHP ]
美团内部讲座|周烜:华东师范大学的数据库系统研究
Live broadcast preview | micro service architecture Learning Series live broadcast phase 3
嘉宾专访|2020 PostgreSQL亚洲大会阿里云数据库专场:曾文旌
华为Mate 40 系列搭载HMS有什么亮点?
新建一个空文件占用多少磁盘空间?
理解格式化原理
常用SQL语句总结
快速排序为什么这么快?
StickEngine-架构12-通信协议