前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API偵錯工具:
提示:本篇詳解axios在vue專案中的範例。在使用Vue.js框架開發前端專案時,會經常傳送ajax請求伺服器端介面,在開發過程中,需要對axios進一步封裝,方便在專案中的使用。【學習視訊分享:、】
axios框架全稱(ajax – I/O – system):
promise
用於瀏覽器和node.js
的http使用者端,因此可以使用Promise API說到axios
我們就不得不說下Ajax
。在舊瀏覽器頁面在向伺服器請求資料時,因為返回的是整個頁面的資料,頁面都會強制重新整理一下,這對於使用者來講並不是很友好。並且我們只是需要修改頁面的部分資料,但是從伺服器端傳送的卻是整個頁面的資料,十分消耗網路資源。而我們只是需要修改頁面的部分資料,也希望不重新整理頁面,因此非同步網路請求就應運而生。
Ajax(Asynchronous JavaScript and XML):
非同步網路請求。Ajax能夠讓頁面無重新整理的請求資料。
實現ajax的方式有多種,如jQuery封裝的ajax,原生的XMLHttpRequest,以及axios。但各種方式都有利弊:
Axios(ajax i/o system):
這不是一種新技術,本質上還是對原生XMLHttpRequest的封裝,可用於瀏覽器和nodejs的HTTP使用者端,只不過它是基於Promise的,符合最新的ES規範。具備以下特點:
使用者端支援防止CSRF/XSRF(跨域請求偽造)
安裝有三種方式:
npm安裝
npm install axios
登入後複製
bower安裝
bower install axios
登入後複製
通過cdn引入
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
登入後複製
在vue專案的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>
登入後複製
範例程式碼
方法一
//請求格式類似於 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);
})
登入後複製
post請求一般分為兩種型別
1、form-data
表單提交,圖片上傳、檔案上傳時用該型別比較多
2、application/json
一般是用於 ajax 非同步請求
範例程式碼
方法一
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請求
let data = {
//請求引數
}
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);
})
登入後複製
範例程式碼
put請求
this.$axios.put('/url',{
id:1
}).then(res=>{
console.log(res.data);
})
登入後複製
patch請求
this.$axios.patch('/url',{
id:1
}).then(res=>{
console.log(res.data);
})
登入後複製
範例程式碼
引數以明文形式提交
this.$axios.delete('/url',{
params: {
id:1
}
}).then(res=>{
console.log(res.data);
})
登入後複製
引數以封裝物件的形式提交
this.$axios.delete('/url',{
data: {
id:1
}
}).then(res=>{
console.log(res.data);
})
//方法二
axios({
method: 'delete',
url: '/url',
params: { id:1 }, //以明文方式提交引數
data: { id:1 } //以封裝物件方式提交引數
}).then(res=>{
console.log(res.data);
})
登入後複製
並行請求:同時進行多個請求,並統一處理返回值
範例程式碼
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);
})
)
登入後複製
範例程式碼
let instance = this.$axios.create({
baseURL: 'http://localhost:9090',
timeout: 2000
})
instance.get('/goods.json').then(res=>{
console.log(res.data);
})
登入後複製
可以同時建立多個axios範例。
axios範例常用設定:
範例程式碼
//設定全域性的超時時長
this.$axios.defaults.timeout = 2000;
//設定全域性的基本URL
this.$axios.defaults.baseURL = 'http://localhost:8080';
登入後複製
範例程式碼
let instance = this.$axios.create();
instance.defaults.timeout = 3000;
登入後複製
範例程式碼
this.$axios.get('/goods.json',{
timeout: 3000
}).then()
登入後複製
以上設定的優先順序為:請求設定 > 範例設定 > 全域性設定
攔截器:在請求或響應被處理前攔截它們
範例程式碼
this.$axios.interceptors.request.use(config=>{
// 發生請求前的處理
return config
},err=>{
// 請求錯誤處理
return Promise.reject(err);
})
//或者用axios範例建立攔截器
let instance = $axios.create();
instance.interceptors.request.use(config=>{
return config
})
登入後複製
範例程式碼
this.$axios.interceptors.response.use(res=>{
//請求成功對響應資料做處理
return res //該返回物件會傳到請求方法的響應物件中
},err=>{
// 響應錯誤處理
return Promise.reject(err);
})
登入後複製
範例程式碼
let instance = this.$axios.interceptors.request.use(config=>{
config.headers = {
token: ''
}
return config
})
//取消攔截
this.$axios.interceptors.request.eject(instance);
登入後複製
範例程式碼
this.$axios.get('/url').then(res={
}).catch(err=>{
//請求攔截器和響應攔截器丟擲錯誤時,返回的err物件會傳給當前函數的err物件
console.log(err);
})
登入後複製
範例程式碼
let source = this.$axios.CancelToken.source();
this.$axios.get('/goods.json',{
cancelToken: source
}).then(res=>{
console.log(res)
}).catch(err=>{
//取消請求後會執行該方法
console.log(err)
})
//取消請求,引數可選,該引數資訊會傳送到請求的catch中
source.cancel('取消後的資訊');
登入後複製
(學習視訊分享:、)
以上就是一文聊聊vue專案中怎麼使用axios?基本用法分享的詳細內容,更多請關注TW511.COM其它相關文章!