網站首頁 編程語言 正文
目錄
一、axios基礎
1、什么是axios?
2、axios的安裝
3、axios常用配置項
4、axios和ajax的區別?
二、使用axios發送請求
1、 發送get無參請求
2、 發送get有參請求
3、 發送post無參請求
4、 發送post有參請求
4.1 發送json格式的數據:
4.2 發送表單格式的數據:
三、 then、catch、finally
四、axios快捷方法
五、axios實例
六、axios的全局配置
七、axios攔截器
八、 axios并發請求
九、axios二次封裝
一、axios基礎
1、什么是axios?
Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。jQuery中也封裝了axios機制,但是僅適用于瀏覽器。
axios功能特點:
-
在瀏覽器中發送 XMLHttpRequests 請求
-
在 node.js 中發送 http請求
-
支持 Promise API
-
攔截請求和響應
-
轉換請求和響應數據
- 自動轉換 JSON 數據
2、axios的安裝
使用npm
npm install axios
使用cdn
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.js"></script>
3、axios常用配置項
只有url選項式必須的,其他的都是可選,這里只列出一些常用配置項,axios還有很多其他的配置項,可以去axios官網查看。
axios({
// 請求路徑
url:"",
// 請求方式,默認發送get請求
method:"",
// get請求攜帶的參數寫在params中
params:{},
// post請求攜帶的參數寫在data中
data:{},
// 請求頭
headers:{},
// 表示請求超過timeout時間沒有響應就中斷 (單位為毫秒)
timeout:1000,
// 規定后端返回的數據格式,默認值是json
responseType: 'json'
})
注意:method默認值為get,因此發送get請求時可以不寫methods,responseType默認值為json?
4、axios和ajax的區別?
ajax特點:
?? ?1、ajax是異步的XML和JavaScript?
?? ?2、可以運行瀏覽器 不可以運行在node
?? ?3、發送給后臺數據需要手動轉換,請求頭需要手動設置
?? ?4、后端響應的數據需要自己轉換成js對象格式(后臺相應數據為json格式)
axios特點:
?? ?1、axios是基于promise的http庫
?? ?2、可以調用promise的api
?? ?3、axios默認發送就是get請求,發送數據默認格式為json
?? ?4、axios請求頭的數據格式會自動轉換?
二、使用axios發送請求
1、 發送get無參請求
axios({
url:'請求地址'
})
2、 發送get有參請求
發送get有參請求時,參數是以查詢字符串的格式拼接到url地址中的。
我們把get請求需要攜帶的參數放到params中,axios會自動將它們轉成查詢字符串。
axios({
url:'請求地址',
// 將要傳給后端的數據放到params中,axios會自動將它們轉成查詢字符串 (即 ?a=1&b=2)
params:{
a:1,
b:2
}
})
3、 發送post無參請求
axios({
url:'請求地址',
method:'post'
})
4、 發送post有參請求
4.1 發送json格式的數據:
使用post請求默認發送的數據格式是json格式
axios({
url:"請求地址",
method:"post",
// 在請求頭中指明發送的數據是json格式的數據,但是這里不寫也可以,因為post請求默認發送的數據格式就是json
// headers:{
// "Content-Type":"application/json"
// },
data:{
a:1,
b:2
}
})
4.2 發送表單格式的數據:
使用Qs工具將表單格式數據轉成json格式的數據,需要先引入Qs:
<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.11.0/qs.js"></script>
axios({
url:"請求地址",
method:"post",
// 在請求頭中指明發送的數據是表單格式的數據,但是這里不寫也可以,因為axios請求頭的數據格式會自動轉換
headers:{
// "Content-Type":"application/x-www-form-urlencoded",
// 如果需要token認證,可以在請求頭中攜帶
"Authorization":token
},
// 這里使用Qs將表單格式的數據轉成json格式數據傳給后臺,因為后臺需要接收json格式的數據
data:Qs.stringify({
a:1,
b:2
})
})
三、 then、catch、finally
因為axios 是一個基于 promise 的 HTTP 庫,因此它支持promise的api,我們可以在axios中使用then、catch、finally方法。
axios({
url:"請求地址",
method:"post",
headers:{
"Authorization":token
},
data:Qs.stringify({
a:1,
b:2
})
}).then(res=>{
console.log(res,'獲取響應');
}).catch(err=>{
console.log(err,'打印錯誤信息');
}).finally(()=>{
console.log('最終執行');
})
四、axios快捷方法
axios提供了以下一些快捷方法:(中括號里面的表示可選參數,config配置對象和axios是一樣的)
axios.request(config)? ?-->等同于?axios(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, config])
axios.post(url[, data[, config]])? -->data表示要傳遞的參數
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
get、delete、head、options使用方法一致,post、put、patch使用方法一致。
(post 和 put:用來保存多條表單數據;patch:用來保存一條表單數據)
// 1、get無參請求
axios.get('請求地址').then(res=>{
console.log(res);
})
//----------------------------------------
// 2、get有參請求
let url = '請求地址'
axios.get(url,{
params:{
a:1,
b:2
},
timeout:2000
}).then(res=>{
console.log(res);
})
//----------------------------------------
// 3、post有參請求
// 3.1 json格式數據
let url = '請求地址'
let data = {
a:1,
b:2
}
axios.post(url,data).then(res=>{
console.log(res);
})
//----------------------------------------
// 3.2 表單格式的數據
let url = '請求地址'
let data = {
a:1,
b:2
}
axios.post(url,Qs.stringify(data),{
headers:{
"Authorization":token
}
}).then(res=>{
console.log(res);
})
五、axios實例
創建axios實例:
axios.create([config])
// 創建實例
let instance = axios.create({
baseURL: '基礎路徑',
timeout: 2000,
headers:{
"Authorization": token
}
})
// 使用實例
instance.post('除去基礎路徑后剩下的路徑',{
a:1,
b:2
}).then(res=>{
console.log(res);
})
六、axios的全局配置
全局配置axios默認配置項:給所有axios請求都添加一些默認配置項
axios.defaults.baseURL = '基礎路徑';
axios.defaults.headers.common['Authorization'] = token;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
七、axios攔截器
axios給我們提供了兩大類攔截器:
一種是請求攔截器,請求方向的攔截(成功請求,失敗請求);
另一種是響應攔截器,響應方向的(成功響應,失敗響應)
攔截器的作用:用于我們在網絡請求的時候在發起請求或者響應時對操作進行相應的處理。
//請求攔截器 對所有的axios請求做一個攔截
axios.interceptors.request.use(
config=>{
// 在發送請求之前做些什么
return config
},
error=>{
// 對請求錯誤做些什么
return Promise.reject(error)
}
);
// 響應攔截器 對響應數據處理
axios.interceptor.response.use(
response=>{
// 對響應數據做點什么
return response
},
error=>{
// 對響應錯誤做點什么
return Promise.reject(error)
}
)
使用:
發送請求時,如果不是登錄接口,需要攜帶token,那么我們可以在請求攔截器中做相應操作,響應攔截器主要用來對響應數據進行提取,因為響應攔截器返回的response是axios封裝后的數據,而response.data才是后端返回的響應數據。
//請求攔截器
axios.interceptors.request.use(
config=>{
// 在發送請求之前做些什么
if(config.url!=='登錄接口'){
// 需要攜帶token 每一個請求請求頭需要攜帶token
config.headers.Authorization='token值';
}
return config
},
error=>{
// 對請求錯誤做些什么
return Promise.reject(error)
}
);
// 響應攔截器
axios.interceptor.response.use(
response=>{
// 對響應數據做點什么
// response.data才是后端返回的響應數據,response是axios封裝后返回的數據
let res = response.data;
return res
},
error=>{
// 對響應錯誤做點什么
return Promise.reject(error)
}
)
axios.post('請求地址',{
a:1,
b:2
}).then(res=>{
console.log(res);
});
八、 axios并發請求
使用axios并發請求可以一次性發送多個異步請求。
處理并發請求的助手函數:
axios.all(iterable)
axios.spread(callback)
axios.all([
axios.get(),
axios.get(),
axios.post()
]).then(
axios.spread((res1,res2,res3)=>{
console.log(res1,res2,res3); //依次打印每一個響應
})
)
axios.all([
axios.get(),
axios.get(),
axios.post()
]).then(res=>{
console.log(res) //打印一個數組,包含上述三個請求的響應結果
})
九、axios二次封裝
我們在vue-cli腳手架中實現對axios的二次封裝。
下載axios
-S 表示在生產環境下安裝
cnpm i -S axios
下載Qs
cnpm i -S qs
在src下新建文件夾utils,utils文件夾下新建文件request.js?
?src/utils/request.js
import axios from 'axios'
import Qs from 'qs'
let qs = Qs
// 創建axios實例對象
let instance = axios.create({
baseURL:"基礎路徑",
timeout:5000
})
// 請求攔截器
instance.interceptors.request.use(config=>{
// console.log(config,'請求配置項');
if(config.url !== '登錄接口'){
config.headers.Authorization = 'token值'
}
return config
},error=>{
alert('請求失敗')
return Promise.reject(error)
})
// 響應攔截器
instance.interceptors.response.use(response=>{
let res = response.data
return res
},error=>{
return Promise.reject(error)
})
// 封裝get方法并導出
export function get(url,params){
return instance.get(url,{
params,
})
}
// 封裝postJSON方法 (發送json格式數據)
export function postJSON(url,data){
return instance.post(url,data)
}
// 封裝post方法 (發送表單格式數據)
export function post(url,data){
return instance.post(url,qs.stringify(data))
}
// 導出axios實例
export default instance
使用:
src/views/AboutView.vue
?src/views/HomeView.vue?
原文鏈接:https://blog.csdn.net/lq313131/article/details/127173938
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-05-28 C語言數據結構超詳細講解單向鏈表_C 語言
- 2022-11-15 Python正則表達式re.search()用法詳解_python
- 2022-06-02 C語言結構體(struct)的詳細講解_C 語言
- 2023-01-23 python操作excel之xlwt與xlrd_python
- 2023-04-29 C/C++并查集的查詢與合并實現原理_C 語言
- 2022-08-12 Python?Pandas?中的數據結構詳解_python
- 2022-11-03 C++模板超詳細介紹_C 語言
- 2022-11-27 C語言移除元素的三種思路講解_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支