AJAX
AJAX原理—XMLHttpRequest
XMLHttpRequest(XHR)对象用于与服务器交互,axios实际上就是对XHR的封装
使用XMLHttpRequest
- 创建XHR对象
- 配置请求方法与URL
- 监听
loadend加载完毕事件,接收响应结果 - 发送请求
1 | const xhr = new XMLHttpRequest(); |
查询参数
格式为http://xxx.com?参数1=值1&参数2=值2
1 | xhr.open("GET", 'http://localhost:3000?name=abc&age=18') |
服务端(node.js的express)收到后可通过req.query取出
请求参数
也叫body参数,可通过post请求发送,发送请求时最好设置请求头声明携带的数据类型,如Content-Type: application/json
Promise
Promise表示管理一个异步操作最终状态和结果值的对象
使用
.then表示执行成功的回调函数,.catch表示执行失败的回调函数
1 | const p = new Promise((resolve, reject) => { |
三种状态
pending待定,在promise管理的异步任务执行完毕之前的状态fulfilled已兑现,执行完resolve()后的状态,将resolve的参数传递给then并执行回调函数rejected已拒绝,执行完reject()后的状态,将reject的参数传递给catch并执行回调函数
Promise的状态只能改变一次,一旦被兑现/拒绝就无法改变
封装简易axios
初步实现
axios的.then和.catch来自Promise,因此只需在函数里return一个Promise即可
1 | function myAxios(config){ |
- 不传入请求方法则默认为
GET,使用逻辑中断||实现 - 通过响应状态码判断请求是否发送成功,进而确定Promise的状态,并将response传过去
- 失败时一般创建
Error对象来存入错误信息 - 使用
try-catch来判断服务端传输来的数据是否是JSON,是则解析为对象,便于前端使用
使用方法有局限性,无法传入查询字符串
实现传入查询字符串
在open前进行判断,因为查询字符串需要拼接在地址中
1 | function myAxios(config){ |
URLSearchParams是浏览器提供的构造函数,传入对象可将其转化为查询字符串的格式,再使用toString将其转换成字符串的形式,最后将其与url拼接起来
实现携带请求体数据
1 | xhr.setRequestHeader("Content-type", "application/json") |
- 在发送请求前设置请求头
- 使用逻辑中断
||获取data数据 - 若用
const data = JSON.stringify(config.data) || undefined,当data不存在时会报错
使用方法
1 | myAxios({ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 MNCLI!
评论










