提示:本篇詳解axios在vue專案中的實例。在使用Vue.js框架開發前端專案時,會經常發送ajax請求服務端接口,在開發過程中,需要對axios進一步封裝,方便在專案中的使用。 【學習影片分享:vue影片教學、web前端影片】
##axios框架全名(ajax – I/O – system):
用於瀏覽器和
node.js的http客戶端,因此可以使用Promise API
axios我們就不得不說下
Ajax。在舊瀏覽器頁面在向伺服器請求數據時,因為返回的是整個頁面的數據,頁面都會強制刷新一下,這對於用戶來講並不是很友好。而我們只是需要修改頁面的部分數據,但是從伺服器端發送的卻是整個頁面的數據,十分消耗網路資源。而我們只是需要修改頁面的部分數據,也希望不刷新頁面,因此非同步網路請求就應運而生。
Ajax(Asynchronous JavaScript and XML): 非同步網路請求。 Ajax能夠讓頁面無刷新的請求資料。
#Axios(ajax i/o system): 這不是一種新技術,本質上還是原生XMLHttpRequest的封裝,可用於瀏覽器和nodejs的HTTP客戶端,只不過它是基於Promise的,符合最新的ES規格。具備以下特點:
npm install axios
bower install axios
<script></script>
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>
方法一
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"> //请求格式类似于 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);
})</pre><div class="contentsignin">登入後複製</div></div>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">this.$axios({
method: 'get',
url: '/goods.json',
params: {
id:1
}
}).then(res=>{
console.log(res.data);
},err=>{
console.log(err);
})</pre><div class="contentsignin">登入後複製</div></div>
post請求一般分為兩種類型1、
表單提交,圖片上傳、檔案上傳時用此類型比較多 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?基本用法分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!