从 ajax 到 axios
XMLHttpRequest 对象
const xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
}
};
const url = "http://www.baidu.com/";
xhr.open("post", url, true); //初始化
const body = {
data: {
a: 1,
},
};
xhr.send(body);
xhr.onload = function () {
// 请求结束后, 在此处写处理代码
console.log("请求成功", xhr.responseText);
};
// 当网络不佳时,我们需要给请求设置一个超时时间
// 超时时间单位为毫秒
xhr.timeout = 1000;
// 当请求超时时,会触发 ontimeout 方法
xhr.ontimeout = () => console.log("请求超时");xhr.readyStatus==0 尚未调用 open 方法
xhr.readyStatus==1 已调用 open 但还未发送请求(未调用 send)
xhr.readyStatus==2 已发送请求(已调用 send)
xhr.readyStatus==3 已接收到请求返回的数据
xhr.readyStatus==4 请求已完成
XMLHttpRequest.responseType 属性是一个枚举属性, 返回响应式数据的类型.
responseType 支持以下几种值:
"" responseType 为空字符串时,采用默认类型 DOMString,与设置为 text 相同。
arraybuffer response 是一个包含二进制数据的 JavaScript arrayBuffer
blob response 是一个包含二进制数据的 blob 对象
document response 是一个 html document 或 xmldocument, 这取决于接收到的数据的 mime 类型.
json response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的
text response 是一个以 DOMString 对象表示的文本。
ajax
fetch
Fetch API 也能像 XHR 那样中断一个请求了,只是稍微绕了一点。通过创建一个 AbortController 实例,我们得到了一个 Fetch API 原生支持的控制中断的控制器。这个实例的 signal 参数是一个 AbortSignal 实例,还提供了一个 abort() 方法发送中断信号。只需要将 signal 参数传递进 fetch() 的初始化参数中,就可以在 fetch 请求之外控制请求的中断了:
过去 FileReader 只能在 onload 事件上拿到整个文件的数据,或者对文件使用 slice() 方法得到 Blob 文件片段。
axios
我们可以为 axios 处理一下错误
取消请求
创建 CancelToken 对象: 在发起请求之前,可以通过 axios.CancelToken.source() 方法创建一个 CancelToken 对象,并获取其中的 token。这个 token 是一个用于标识该请求的令牌。
关联 CancelToken: 将创建的 CancelToken 对象中的 token 关联到请求的配置中,通过 cancelToken 参数。这告诉 Axios 在取消令牌触发时要取消这个请求。
取消请求: 当想要取消请求时,调用 CancelToken 对象中的 cancel 方法,并提供一个取消的原因。这会触发 Axios 内部的逻辑,导致底层的网络请求被中止。
捕获取消错误: 如果请求在取消前已经发出,Axios 会抛出一个名为 Cancel 的错误。可以使用 axios.isCancel(error) 来检查是否是取消错误。在 .catch 部分处理这个取消错误。
封装完成的取消请求
// 自己实现一个简略版的
demo
接下来是 ant-design-pro 的代码
封装层级深
最后更新于
这有帮助吗?