亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解axios中封裝使用、攔截特定請求、判斷所有請求加載完畢)

2024-05-06 16:49:45
字體:
來源:轉載
供稿:網友

•基于 Promise 的 HTTP 請求客戶端,可同時在瀏覽器和 Node.js 中使用
•vue2.0之后,就不再對 vue-resource 更新,而是推薦使用 axios,本項目也是使用 axios
•功能特性
•在瀏覽器中發送 XMLHttpRequests 請求
•在 node.js 中發送 http請求
•支持 Promise API
•攔截請求和響應
•轉換請求和響應數據
•取消請求
•自動轉換 JSON 數據
•客戶端支持保護安全免受 CSRF/XSRF(跨站請求偽造) 攻擊

封裝使用

建議拆分三個文件

•src
 -> service
 ---->axios.js (axios 配置,攔截器、統一 url)
---->index.js (接口方法,里面調用 api 方法,供頁面級調用)
---->api
 ------->index.js(api 方法,里面調用后端提供的接口,供接口方法調用)

axios.js 基本配置

'use strict';import axios from 'axios';// 自動識別接口使用開發環境地址(開發環境地址做了 proxyTable 代理,故設置為空)或線上地址axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? process.env.API_ROOT : '';// 開發環境直接打包測試// axios.defaults.baseURL = '';axios.interceptors.request.use(config => { return config;}, error => { console.log(error); return Promise.reject(error);});axios.interceptors.response.use(res => { const apiRes = res.data; return apiRes;}, async error => { console.dir(error); return Promise.reject(error);});export default axios;api/index.js 調用后端提供的接口import Ax from '@/service/axios';import qs from 'qs';export default { fetchBlog (reqData) {  return Ax.get('/krryblog/blog/getBlog', {params: reqData}); }, addBlog (reqData) {  return Ax.post('/krryblog/blog/addBlog', qs.stringify(reqData)); }, updateBlog (reqData) {  return Ax.post('/krryblog/blog/updateBlog', qs.stringify(reqData)); }, deleteBlogCover (id, reqData) {  return Ax.post(`/krryblog/blog/deleteBlogCover/${id}`, qs.stringify(reqData)); },};

index.js 接口方法(調用 api)

import Api from './api';export async function getBlog(reqData) { let res = await Api.fetchBlog(reqData); return res;},export async function addBlog (reqData) { let res = await Api.addBlog(reqData); return res;},export async function updateBlog (reqData) { let res = await Api.updateBlog(reqData); return res;},export async function deleteBlogCover (id, reqData) { let res = await Api.deleteBlogCover(id, reqData); return res;},

頁面調用

接下來就可以愉快地在頁面調用了

import { getBlog } from '@/service'export default { data() {  return {   tableData: [],   pageIndex: 1,   pageSize: 9  } }, created() {  this.getList(); }, methods: {  async getList() {   let { result } = await getBlog({    pageIndex: this.pageIndex,    pageSize: this.pageSize   });  this.tableData = result.data; },}

axios 執行多個并發請求

async getList() { let resArr = [] for (let val of this.arrId) {  // push 請求  resArr.push(queryPropertyValue({ id: val })) } this.tableData = [] Promise.all(resArr).then(res => {  for (let val of res) {   let vals = val.result.propertyValues   // 每個請求的結果 push 到 tableData   vals.forEach(item => this.tableData.push(item))  } })},

或者直接在 axios 寫 promise all

// 根據 id 獲取某一條商品數據let getDetail = (id)=>{ return axios.get(`/detail?bid=${id}`);}// 檢測登錄的用戶是否將此商品加入購物車let detectCar = (shopId,userId)=>{ return axios.get(`/detectCar?shopId=${shopId}&userId=${userId}`);}// 獲取一條商品數據、并且檢測是否加入購物車let getDeAll = (shopId,userId)=>{ axios.all([  getDetail(shopId),  detectCar(shopId,userId) ]).then(axios.spread((resDetail, resCar)=>{  // 兩個請求現已完成  // 打印兩個請求的響應值   console.log(resDetail);  console.log(resCar); }));}

•實例的方法

axios#request(config)axios#get(url [,config])axios#delete(url [,config])axios#head(url [,config])axios#post(url [,data [,config]])axios#put(url [,data [,config]])axios#patch(url [,data [,config]])

•請求配置:只有url是必需的,如果未指定方法,請求將默認為GET

axios 攔截特定請求

業務上經常出現這個問題,需要攔截某些特定請求,在該特定請求,頁面采取或不采取什么變化

研究 axios 的 request 統一攔截方法:axios.interceptors.request.use(function (config) {})

參數 config 如下:

可以發現 config.url 就是請求的接口的地址,那么 “/” 最后的 getClassify 就是該請求的方法,就可以通過取出該字符串來判斷某些特定請求,從而做出怎樣的變化

axios.interceptors.request.use(config => { // 判斷請求是否是 getClassify,如果是 getClassify,不加載 LoadingBar let url = config.url; if (url.split('/').pop() === 'getClassify') {  flag = false; } else {  iView.LoadingBar.start();  flag = true; } return config;}, error => { console.log(error); return Promise.reject(error);});

如何判斷所有請求加載完畢

let reqNum = 0axios.interceptors.request.use(function (config) { // 在請求發出之前進行一些操作,每次發出請求就 reqNum++ reqNum++ _bus.$emit('showloading') return config}axios.interceptors.response.use(response => { // 接受請求后 reqNum--,判斷請求所有請求是否完成 reqNum-- if (reqNum <= 0) {  _bus.$emit('closeLoading') } else {  _bus.$emit('showloading') }})

axios 的 post 請求 相關問題

•如果遇到 post 請求跨域問題,在 webpack 配置文件可以設置 proxyTable 處理跨域問題
•傳送門:https://ainyi.com/27
•post 請求攜帶參數,需要做一次序列化:qs.stringify(reqData)

saveNormalAds (reqData) { return Ax.post('/index.php?krry', qs.stringify(reqData));},

總結

以上所述是小編給大家介紹的詳解axios中封裝使用、攔截特定請求、判斷所有請求加載完畢),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线播放日韩精品| 日韩精品极品视频免费观看| 精品久久香蕉国产线看观看亚洲| 欧美肥老太性生活视频| 欧美在线不卡区| 91久久精品美女| 国产日韩欧美在线观看| 色综合久久精品亚洲国产| 久久久av免费| 成人在线视频网| 国产精品久久精品| 欧美午夜精品久久久久久浪潮| 97涩涩爰在线观看亚洲| www亚洲精品| 国产精品爽爽爽爽爽爽在线观看| 国产www精品| 欧美性69xxxx肥| 97人人爽人人喊人人模波多| 久久在线免费视频| 久久国产精品影片| 91精品国产成人www| 在线视频日本亚洲性| 亚洲欧美日韩综合| 中文字幕在线亚洲| 91精品久久久久久久久久另类| 91夜夜揉人人捏人人添红杏| 欧美又大粗又爽又黄大片视频| 久久av.com| 国产福利精品视频| 亚洲天堂av高清| 国产精品999999| 国产亚洲精品日韩| 欧美多人乱p欧美4p久久| 国产精品网红直播| 欧美激情视频在线免费观看 欧美视频免费一| 少妇高潮 亚洲精品| 欧美专区在线观看| 正在播放欧美一区| 色综合久综合久久综合久鬼88| 欧美精品第一页在线播放| 尤物九九久久国产精品的分类| 日韩亚洲欧美成人| 国产mv久久久| 国产精品视频中文字幕91| 欧美激情精品久久久久久蜜臀| 国产亚洲精品久久久优势| 尤物yw午夜国产精品视频明星| 少妇av一区二区三区| 亚洲国产精品字幕| 97久久久免费福利网址| 欧美成人全部免费| 欧美成人在线网站| 97视频免费在线观看| 亚洲精品日韩丝袜精品| 国产日韩在线看片| 日韩中文字幕视频在线| 韩国福利视频一区| 欧美精品999| 久久99视频精品| 欧美亚洲另类在线| 国产这里只有精品| 亚洲欧美日韩精品久久亚洲区| 亚洲自拍小视频| 国产一区二区三区视频免费| www.亚洲一区| 国产精品中文久久久久久久| 日韩av最新在线| 成人福利网站在线观看| 91成人在线播放| 久久久久免费视频| 91精品国产免费久久久久久| 成人福利网站在线观看11| 亚洲欧美日韩天堂| 4p变态网欧美系列| 国产欧美日韩中文字幕在线| 尤物yw午夜国产精品视频| 国产精品久久久久免费a∨大胸| 青青久久av北条麻妃黑人| 欧美午夜精品久久久久久人妖| 在线精品国产欧美| 久久午夜a级毛片| 91久久精品久久国产性色也91| 国产日韩欧美电影在线观看| 久久久久久久亚洲精品| 亚洲人成免费电影| 亚洲欧美国产精品专区久久| 国产精品一区二区av影院萌芽| 国外成人在线直播| 日本成人激情视频| 亚洲性猛交xxxxwww| 亚洲一区第一页| 国产精品久久久久91| 欧美精品久久久久久久久久| 亚洲午夜色婷婷在线| 91香蕉亚洲精品| 成人免费黄色网| 欧美在线视频一二三| 中文字幕亚洲专区| 国产中文字幕日韩| 国产精品欧美一区二区| 国产欧美亚洲精品| 国产手机视频精品| 精品国产999| 亚洲人成绝费网站色www| 国产在线一区二区三区| 91高清免费在线观看| 亚洲性生活视频| 热久久免费视频精品| 欧美激情aaaa| 日韩国产欧美精品一区二区三区| 成人欧美一区二区三区在线湿哒哒| 久久精品国产精品亚洲| 国产v综合ⅴ日韩v欧美大片| 在线精品高清中文字幕| 久久久久久久91| 欧美日韩国产麻豆| 免费不卡欧美自拍视频| 在线亚洲午夜片av大片| 色播久久人人爽人人爽人人片视av| 国产激情久久久| 日韩中文在线中文网在线观看| 亚洲国产精品久久久久秋霞蜜臀| 91香蕉嫩草影院入口| 中文字幕亚洲欧美| 91视频免费在线| 日韩精品视频在线| 日韩成人中文电影| 国产精品久久久久久久久久久不卡| 亚洲综合av影视| 成人欧美一区二区三区在线湿哒哒| 亚洲片在线观看| 性色av一区二区咪爱| 国产福利视频一区二区| 亚洲欧美三级在线| 91精品国产电影| 欧美日韩亚洲成人| 欧美精品免费在线观看| 久久久久女教师免费一区| 成人欧美一区二区三区黑人孕妇| 夜夜嗨av色综合久久久综合网| 亚洲小视频在线| 欧美一区二区三区免费观看| 日韩精品免费在线播放| 青草成人免费视频| 欧美日本亚洲视频| 国内精品400部情侣激情| 国产精品电影网| 成人福利在线观看| 欧美日韩国产va另类| 日韩理论片久久| 国产精品一区二区av影院萌芽| 亚洲一二三在线| 亚洲欧洲日本专区| 萌白酱国产一区二区| 久久午夜a级毛片| 亚洲男人的天堂网站| 国产美女扒开尿口久久久| 激情久久av一区av二区av三区| 国产成人啪精品视频免费网| 中文字幕国产精品久久| 精品久久久久久久久中文字幕| 一区二区三区国产视频| 中文字幕亚洲欧美| 2020国产精品视频|