一.axios與ajax區別
相同點:都是執行異步請求操作
不同點:
- 大小
- axios體積小 只需在要使用的目錄下 npm install axios --save
- ajax 需要導入jQuery【體積較大 只是為了ajax去引入是不值得的】
- 針對方向
- axios 符合前端MVVM的浪潮
- ajax 本身是針對MVC的編程
- 實現方法與返回值
- axios 用promise技術實現對ajax技術的封裝 返回值是 promise
- ajax 基於原生的XHR開發,XHR本身的架構不清晰,已經有了fetch的替代方案
- 對並發請求的封裝api
二.axios應用
1. 安裝axios 打開需要使用的路徑下的命令行
npm install axios --save
2. 在需要使用 axios 的地方導入
import axios from 'axios'
3. axios實例使用
- 創建實例
- axios可直接使用 axios(config) 但還是推薦創建實例,因為可以對實例進行單獨配置,下方講解
1 axios({ 2 url:'服務器url', 3 method:'請求方式' , 4 params:{ 5 name:'cc', 6 age:'18' 7 } 8 }).then(res=>{ 9 console.log(res) 10 })
-
- axios.all([ ]) 一次執行多個請求【並發請求】
1 axios.all([axios({ 2 //第一個請求參數 3 }), axios({ 4 //第二個請求參數 5 })]) 6 .then(results => { 7 //返回值數組 分別是一與二請求的結果 8 console.log(results) 9 })
-
- 設置默認配置【默認屬性 可在使用時省略 類似父類】
1 axios.defaults.baseURL = '默認路徑' 2 axios.defaults.timeout = 5000
***注意:method:get 請求參數對應 params:{ name:'cc'}
method:post 請求參數對應 data:{ name:'cc'}
4. 創建實例-配置
- 原因
- 項目中要請求多個不同url獲取數據 因此每個的使用baseUrl 不一定相同。
- axios是全局的 如果直接使用修改 很可能出現問題
- 使用
- 調用axios.create(config)的 api實現創建實例-【其中config為上面的obj對象】
1 const instance = axios.create({ 2 baseURL : '請求路徑', 3 timeout : 5000 4 })
三、應用於vue 封裝request方法
最后對其進行封裝requset函數-【為了直接在其他地方直接使用】(分三步)
- 創建實例
- 放置默認配置 baseURL等
- 增加攔截器
- 可以對訪問請求 與 響應攔截操作 對數據進行二次加工
- 返回網絡請求
- 返回promise對象 完成封裝
- 在外部使用.then()繼續實現下一步操作
1 export function request(config) { 2 //1.創建axios實例 3 const instance = axios.create({ 4 baseURL: '', 5 timeout: 5000 6 }) 7 8 //2.axios攔截器 9 //2.1請求攔截 10 instance.interceptors.request.use(config=>{ 11 //攔截操作 12 return config //必須返回回去 否則調用處取不到 13 },err=>{ 14 //console.log(err) 15 }) 16 //2.2響應攔截 17 instance.interceptors.response.use(res=>{ 18 //攔截操作 19 return res //必須返回回去 否則調用處取不到 20 },err=>{ 21 //console.log(err) 22 }) 23 24 //3發送真正的網絡請求【返回promise對象】 25 return instance(config) 26 }