国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

關于前端ajax請求的優雅方案(http客戶端為axios)

2024-09-01 08:26:59
字體:
來源:轉載
供稿:網友

前言

AJAX,Asynchronous JavaScript and XML (異步的JavaScript和XML),一種創建交互式網頁應用的網頁開發技術方案。

異步的JavaScript:

使用 【JavaScript語言】 以及 相關【瀏覽器提供類庫】 的功能向服務端發送請求,當服務端處理完請求之后,【自動執行某個JavaScript的回調函數】。

PS:以上請求和響應的整個過程是【偷偷】進行的,頁面上無任何感知。

下面話不多說了,來一看看本文的正文。

本文http客戶端為axios

先講個故事

類似axios這種支持Promise的API已經很友好了,請求成功后我們可以從then的Response中拿到后端返回的數據。比如:

axios.get('/user/12345') .then((response) => { console.log(response); }) .catch((error) => { console.log(error); });

數據在response.data中,這意味著我們每個請求都需要多做一次處理才能拿到實際的數據。

然后,實際場景后端基本不會直接把數據給我們,他會做一層封裝,比如response.data的結構會是這樣:

{ "date": "2017-12-14 15:21:38", "success": true, "obj": { ... }, "version": "V1.0"}

所以,response.data.obj才是我們真正要的數據啊喂,所以我們每個請求都需要再多做一次處理=_=

突然有一天,后端說,“response.data不再是對象,改成了JSON字符串,你做一下處理~”。

然后是的,每個接口,是每一個,我們都需要改成JSON.parse(response.data).obj,半條命哦!

如果,后端再說,“我又改回對象了,你撤銷之前的處理吧~”。。。

如果,后端又說,“不是所有的都是對象,有一些還是JSON字符串,具體你看下更新的接口文檔~”。。。

如果,我們不曾相遇。。。

后來的我們

ES6 Proxy用于修改某些操作的默認行為,等同于在語言層面做出修改,所以屬于一種“元編程”(meta programming),即對編程語言進行編程。

Proxy可以理解成,在目標對象之前架設一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。

要解除上述苦惱,我們需要對所有的接口請求做統一的封裝。如此一來,就算后端改來改去,我們只需修改一個地方甚至不用修改!

const apiService = new Proxy(axios, { get (target, propKey, receiver) { return function (...args) { return target[propKey](...args) .then((res) => {  const resData = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;  return typeof resData.obj === 'string' ? JSON.parse(resData.obj) : resData.obj; }) .catch((err) => {  throw err; }); } }});            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 县级市| 讷河市| 木里| 乐山市| 茌平县| 文山县| 迁西县| 那坡县| 许昌县| 鲁甸县| 南漳县| 健康| 安吉县| 保定市| 通山县| 图木舒克市| 喀喇| 平山县| 玉环县| 舟曲县| 始兴县| 柳林县| 佛冈县| 揭西县| 长岛县| 南丹县| 即墨市| 瑞昌市| 安丘市| 潮安县| 邵东县| 珠海市| 交口县| 城固县| 铜山县| 赣榆县| 香河县| 城固县| 江永县| 上虞市| 瑞丽市|