三分鐘讓你快速學(xué)會(huì)axios在vue項(xiàng)目中的基本用法(推薦!)
提示:本篇詳解axios在vue項(xiàng)目中的實(shí)例。在使用Vue.js框架開(kāi)發(fā)前端項(xiàng)目時(shí),會(huì)經(jīng)常發(fā)送ajax請(qǐng)求服務(wù)端接口,在開(kāi)發(fā)過(guò)程中,需要對(duì)axios進(jìn)一步封裝,方便在項(xiàng)目中的使用。
Axios簡(jiǎn)介
axios框架全稱(chēng)(ajax – I/O – system):
基于promise用于瀏覽器和node.js的http客戶(hù)端,因此可以使用Promise API
一、axios是干啥的
說(shuō)到axios我們就不得不說(shuō)下Ajax。在舊瀏覽器頁(yè)面在向服務(wù)器請(qǐng)求數(shù)據(jù)時(shí),因?yàn)榉祷氐氖钦麄€(gè)頁(yè)面的數(shù)據(jù),頁(yè)面都會(huì)強(qiáng)制刷新一下,這對(duì)于用戶(hù)來(lái)講并不是很友好。并且我們只是需要修改頁(yè)面的部分?jǐn)?shù)據(jù),但是從服務(wù)器端發(fā)送的卻是整個(gè)頁(yè)面的數(shù)據(jù),十分消耗網(wǎng)絡(luò)資源。而我們只是需要修改頁(yè)面的部分?jǐn)?shù)據(jù),也希望不刷新頁(yè)面,因此異步網(wǎng)絡(luò)請(qǐng)求就應(yīng)運(yùn)而生。
Ajax(Asynchronous JavaScript and XML):
異步網(wǎng)絡(luò)請(qǐng)求。Ajax能夠讓頁(yè)面無(wú)刷新的請(qǐng)求數(shù)據(jù)。
實(shí)現(xiàn)ajax的方式有多種,如jQuery封裝的ajax,原生的XMLHttpRequest,以及axios。但各種方式都有利弊:
- 原生的XMLHttpRequest的配置和調(diào)用方式都很繁瑣,實(shí)現(xiàn)異步請(qǐng)求十分麻煩
- jQuery的ajax相對(duì)于原生的ajax是非常好用的,但是沒(méi)有必要因?yàn)橐胊jax異步網(wǎng)絡(luò)請(qǐng)求而引用jQuery框架
Axios(ajax i/o system):
這不是一種新技術(shù),本質(zhì)上還是對(duì)原生XMLHttpRequest的封裝,可用于瀏覽器和nodejs的HTTP客戶(hù)端,只不過(guò)它是基于Promise的,符合最新的ES規(guī)范。具備以下特點(diǎn):
- 在瀏覽器中創(chuàng)建XMLHttpRequest請(qǐng)求
- 在node.js中發(fā)送http請(qǐng)求
- 支持Promise API
- 攔截請(qǐng)求和響應(yīng)
- 轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)
- 取消要求
- 自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)
- 客戶(hù)端支持防止CSRF/XSRF(跨域請(qǐng)求偽造)
二、安裝使用
安裝有三種方式:
npm安裝
npm install axios
bower安裝
bower install axios
通過(guò)cdn引入
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
在vue項(xiàng)目的main.js文件中引入axios
import axios from 'axios' Vue.prototype.$axios = axios
在組件中使用axios
<script> export default { mounted(){ this.$axios.get('/goods.json').then(res=>{ console.log(res.data); }) } } </script>
三、Axios請(qǐng)求方式
1、axios可以請(qǐng)求的方法:
- get:獲取數(shù)據(jù),請(qǐng)求指定的信息,返回實(shí)體對(duì)象
- post:向指定資源提交數(shù)據(jù)(例如表單提交或文件上傳)
- put:更新數(shù)據(jù),從客戶(hù)端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容
- patch:更新數(shù)據(jù),是對(duì)put方法的補(bǔ)充,用來(lái)對(duì)已知資源進(jìn)行局部更新
- delete:請(qǐng)求服務(wù)器刪除指定的數(shù)據(jù)
2、get請(qǐng)求
示例代碼
方法一
//請(qǐng)求格式類(lèi)似于 http://localhost:8080/goods.json?id=1 this.$axios.get('/goods.json',{ params: { id:1 } }).then(res=>{ console.log(res.data); },err=>{ console.log(err); })
方法二
this.$axios({ method: 'get', url: '/goods.json', params: { id:1 } }).then(res=>{ console.log(res.data); },err=>{ console.log(err); })
3、post請(qǐng)求
post請(qǐng)求一般分為兩種類(lèi)型
1.form-data 表單提交,圖片上傳、文件上傳時(shí)用該類(lèi)型比較多
2. application/json 一般是用于 ajax 異步請(qǐng)求
示例代碼
方法一
this.$axios.post('/url',{ id:1 }).then(res=>{ console.log(res.data); },err=>{ console.log(err); })
方法二
$axios({ method: 'post', url: '/url', data: { id:1 } }).then(res=>{ console.log(res.data); },err=>{ console.log(err); })
form-data請(qǐng)求
let data = { //請(qǐng)求參數(shù) } let formdata = new FormData(); for(let key in data){ formdata.append(key,data[key]); } this.$axios.post('/goods.json',formdata).then(res=>{ console.log(res.data); },err=>{ console.log(err); })
4、put和patch請(qǐng)求
示例代碼
put請(qǐng)求
this.$axios.put('/url',{ id:1 }).then(res=>{ console.log(res.data); })
patch請(qǐng)求
this.$axios.patch('/url',{ id:1 }).then(res=>{ console.log(res.data); })
5、delete請(qǐng)求
示例代碼
參數(shù)以明文形式提交
this.$axios.delete('/url',{ params: { id:1 } }).then(res=>{ console.log(res.data); })
參數(shù)以封裝對(duì)象的形式提交
this.$axios.delete('/url',{ data: { id:1 } }).then(res=>{ console.log(res.data); }) //方法二 axios({ method: 'delete', url: '/url', params: { id:1 }, //以明文方式提交參數(shù) data: { id:1 } //以封裝對(duì)象方式提交參數(shù) }).then(res=>{ console.log(res.data); })
6、并發(fā)請(qǐng)求
并發(fā)請(qǐng)求:同時(shí)進(jìn)行多個(gè)請(qǐng)求,并統(tǒng)一處理返回值
示例代碼
this.$axios.all([ this.$axios.get('/goods.json'), this.$axios.get('/classify.json') ]).then( this.$axios.spread((goodsRes,classifyRes)=>{ console.log(goodsRes.data); console.log(classifyRes.data); }) )
四、Axios實(shí)例
1、創(chuàng)建axios實(shí)例
示例代碼
let instance = this.$axios.create({ baseURL: 'http://localhost:9090', timeout: 2000 }) instance.get('/goods.json').then(res=>{ console.log(res.data); })
可以同時(shí)創(chuàng)建多個(gè)axios實(shí)例。
axios實(shí)例常用配置:
- baseURL 請(qǐng)求的域名,基本地址,類(lèi)型:String
- timeout 請(qǐng)求超時(shí)時(shí)長(zhǎng),單位ms,類(lèi)型:Number
- url 請(qǐng)求路徑,類(lèi)型:String
- method 請(qǐng)求方法,類(lèi)型:String
- headers 設(shè)置請(qǐng)求頭,類(lèi)型:Object
- params 請(qǐng)求參數(shù),將參數(shù)拼接在URL上,類(lèi)型:Object
- data 請(qǐng)求參數(shù),將參數(shù)放到請(qǐng)求體中,類(lèi)型:Object
2、axios全局配置
示例代碼
//配置全局的超時(shí)時(shí)長(zhǎng) this.$axios.defaults.timeout = 2000; //配置全局的基本URL this.$axios.defaults.baseURL = 'http://localhost:8080';
3、axios實(shí)例配置
示例代碼
let instance = this.$axios.create(); instance.defaults.timeout = 3000;
4、axios請(qǐng)求配置
示例代碼
this.$axios.get('/goods.json',{ timeout: 3000 }).then()
以上配置的優(yōu)先級(jí)為:請(qǐng)求配置 > 實(shí)例配置 > 全局配置
五、攔截器
攔截器:在請(qǐng)求或響應(yīng)被處理前攔截它們
1、請(qǐng)求攔截器
示例代碼
this.$axios.interceptors.request.use(config=>{ // 發(fā)生請(qǐng)求前的處理 return config },err=>{ // 請(qǐng)求錯(cuò)誤處理 return Promise.reject(err); }) //或者用axios實(shí)例創(chuàng)建攔截器 let instance = $axios.create(); instance.interceptors.request.use(config=>{ return config })
2、響應(yīng)攔截器
示例代碼
this.$axios.interceptors.response.use(res=>{ //請(qǐng)求成功對(duì)響應(yīng)數(shù)據(jù)做處理 return res //該返回對(duì)象會(huì)傳到請(qǐng)求方法的響應(yīng)對(duì)象中 },err=>{ // 響應(yīng)錯(cuò)誤處理 return Promise.reject(err); })
3、取消攔截
示例代碼
let instance = this.$axios.interceptors.request.use(config=>{ config.headers = { token: '' } return config }) //取消攔截 this.$axios.interceptors.request.eject(instance);
六、錯(cuò)誤處理
示例代碼
this.$axios.get('/url').then(res={ }).catch(err=>{ //請(qǐng)求攔截器和響應(yīng)攔截器拋出錯(cuò)誤時(shí),返回的err對(duì)象會(huì)傳給當(dāng)前函數(shù)的err對(duì)象 console.log(err); })
七、取消請(qǐng)求
示例代碼
let source = this.$axios.CancelToken.source(); this.$axios.get('/goods.json',{ cancelToken: source }).then(res=>{ console.log(res) }).catch(err=>{ //取消請(qǐng)求后會(huì)執(zhí)行該方法 console.log(err) }) //取消請(qǐng)求,參數(shù)可選,該參數(shù)信息會(huì)發(fā)送到請(qǐng)求的catch中 source.cancel('取消后的信息');
結(jié)語(yǔ)
到此這篇關(guān)于axios在vue項(xiàng)目中的基本用法的文章就介紹到這了,更多相關(guān)axios在vue項(xiàng)目的基本用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue2.0/3.0雙向數(shù)據(jù)綁定的實(shí)現(xiàn)原理詳解
這篇文章主要給大家介紹了關(guān)于Vue2.0/3.0雙向數(shù)據(jù)綁定的實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04vite項(xiàng)目vite.config.js詳細(xì)配置
vite.config.js是Vite框架中的配置文件,用于配置項(xiàng)目的構(gòu)建和運(yùn)行時(shí)的行為,下面這篇文章主要給大家介紹了關(guān)于vite項(xiàng)目vite.config.js詳細(xì)配置的相關(guān)資料,需要的朋友可以參考下2023-05-05vue中實(shí)現(xiàn)先請(qǐng)求數(shù)據(jù)再渲染dom分享
下面小編就為大家分享一篇vue中實(shí)現(xiàn)先請(qǐng)求數(shù)據(jù)再渲染dom分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03使用vue實(shí)現(xiàn)HTML頁(yè)面生成圖片的方法
這篇文章主要介紹了使用vue實(shí)現(xiàn)HTML頁(yè)面生成圖片的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03VUE使用draggable實(shí)現(xiàn)組件拖拽
這篇文章主要為大家詳細(xì)介紹了VUE使用draggable實(shí)現(xiàn)組件拖拽,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04vue3實(shí)現(xiàn)動(dòng)態(tài)路由及菜單
這篇文章主要介紹了vue3實(shí)現(xiàn)動(dòng)態(tài)路由及菜單,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03利用Vue3+Element-plus實(shí)現(xiàn)大文件分片上傳組件
在開(kāi)發(fā)中如果上傳的文件過(guò)大,可以考慮分片上傳,分片就是說(shuō)將文件拆分來(lái)進(jìn)行上傳,將各個(gè)文件的切片傳遞給后臺(tái),然后后臺(tái)再進(jìn)行合并,下面這篇文章主要給大家介紹了關(guān)于利用Vue3+Element-plus實(shí)現(xiàn)大文件分片上傳組件的相關(guān)資料,需要的朋友可以參考下2023-01-01前端Vue?select下拉框使用以及監(jiān)聽(tīng)事件詳解
由于前端項(xiàng)目使用的是Vue.js和bootstrap整合開(kāi)發(fā),中間用到了select下拉框,這篇文章主要給大家介紹了關(guān)于前端Vue?select下拉框使用以及監(jiān)聽(tīng)事件的相關(guān)資料,需要的朋友可以參考下2024-03-03