广州市酒店网站设计,招聘网官网,湛江做网站优化,工具用具使用费是指企业施工生产axios中文网
一. 为什么会诞生Axios
最初浏览器页面向服务器请求数据时#xff0c;返回的是整个页面#xff0c;整个页面都会刷新ajax的出现#xff0c;它可以在页面无刷新的情况下请求数据原生的XMLHttpRequest#xff0c;jQuery封装的ajax#xff0c;以及axios都可以实…axios中文网
一. 为什么会诞生Axios
最初浏览器页面向服务器请求数据时返回的是整个页面整个页面都会刷新ajax的出现它可以在页面无刷新的情况下请求数据原生的XMLHttpRequestjQuery封装的ajax以及axios都可以实现异步的网络请求axios相比于原生的XMLHttpRequest对象简单易用相比于jQueryaxios包尺寸小且提供了易于扩展的接口是专注于网络请求的库axios本质上是XMLHttpRequest的封装
二. Axios是什么
axios是一个基于Promise的网络请求库可以用于浏览器和node.js简单来说就是可以发送get、post等请求vue、react等框架的出现促使axios轻量级库的出现。因为vue、react等不需要操作dom所以不需要引入jquery.js了
三. axios与ajax的区别
理论区别
axios是通过Promise实现对ajax的封装就像jQuery对ajax的封装一样。ajax实现了页面局部的刷新axios实现了对ajax的封装axios是ajaxajax不止axios即axios是ajax的衍生
逻辑区别
ajax 本身是一个针对MVC的编程axios符合现在前端MVVM的浪潮
axios的特点
从浏览器创建XMLHttpRequest从node.js创建http请求支持Promise API拦截请求和响应转换请求和响应数据取消请求自动转换JSON数据客户端支持防御XSRF
四. axios请求的五种方式getpostputpatchdelete
注使用axios记得先安装它的依赖并导入此处省略
get获取数据post提交数据表单提交文件上传put更新数据所有数据推送到后端patch更新数据只将更新的数据推送到后端delete删除数据
// params 是将与请求一起发送的url参数对应后台中的query
// data 是作为请求主体被发送的数据对应后台中的body
axios.request(config)
axios.get(url[, config]) // 只支持 params 传参
axios.delete(url[, config]) // 只支持 params传参
axios.head(url[, config]) // 只支持 params传参
axios.post(url[, data[, config]]) // 同时支持 data 和 params
axios.put(url[, data[, config]]) // 同时支持 data 和 params
axios.patch(url[, data[, config]]) // 同时支持 data 和 params使用方法
1. get方法
scriptimport axios from axiosexport default {mounted () {axios.get(接口地址, {params: {}}).then((res) {})}}
/script
2. post方法
scriptimport axios from axiosexport default {mounted () {// 1.【参数为application/json请求方式】axios.post(接口地址, {}).then((res) {})// 2.【参数为form-data请求方式的表单提交图片上传/文件上传】let data { id: 12 }let formData new formData()for (let key in data) {formData.append(key, data[key])}axios.post(接口地址, formData).then((res) {})}}
/script
3. put方法
scriptimport axios from axiosexport default {mounted () {axios.put(接口地址, {}).then((res) {})}}
/script
4. patch方法
scriptimport axios from axiosexport default {mounted () {axios.patch(接口地址, {}).then((res) {})}}
/script
5. delete方法
scriptimport axios from axiosexport default {mounted () {// 写法一axios.delete(接口地址, { params: {} }).then((res) {})// 写法二axios.delete(接口地址, { data: {} }).then((res) {})}}
/script
五. axios拦截器的介绍 1. axios拦截器的原理 网络请求 —— axios —— 请求拦截器 —— 服务器 —— 响应拦截器 —— 服务器 2. 请求拦截器主要处理token的统一注入问题
import axios from axios;
const axiosRequest axios.create(); // 创建axios实例axiosRequest.interceptors.request.use(config {// 有token修改token,没有token跳转登录if (store.getters.getToken ! ) {// 让每个请求携带token-- [X-Token]为自定义key 请根据实际情况自行修改if(!config.headers[Authorization]){config.headers[Authorization] store.getters.getToken; // getToken();}} else {if (config.url.charAt(/login?) -1) {window.location /login;}} return config}, error {return Promise.reject(error)
})3. 响应拦截器主要处理返回的数据异常和数据结构的问题
import axios from axios;
const axiosRequest axios.create(); // 创建axios实例axiosRequest.interceptors.response.use(response {if (response response.data response.data.code 401) {store.dispatch(setToken, );if (messagetimeout) {clearTimeout(messagetimeout)messagetimeout null}messagetimeout setTimeout(function () {this.$message({type: error,message: 认证失效请重新登录!,duration: 1000,onClose: function () {}})setTimeout(() {let routeData router.resolve({path: /login,})location.href routeData.href;}, 500)}, 500)return Promise.reject(response.data)}if (response response.data response.data.code 20007) { this.$message({type: error,message: 此用户已在其他地方登陆! ,duration: 1000,onClose: function () {window.location login;}})return Promise.reject(response.data)}if (response response.data !response.data.success !isMobile) {if (typeof response.data object !(response.data instanceof Blob)) {this.$message({type: error,message: response.data.message})}}
},async error {// error 有response对象 configif (error.response error.response.data error.response.data.code 10002) {// 后端告诉前端token超时了await store.dispatch(user/lgout) // 调用登出actionrouter.push(/login) // 跳到登录页}this.$message.error(error.message) // 提示错误return Promise.reject(error) // 传入一个错误的对象 就认为promise执行链 进入了catch
})
六. axios的封装