本篇文章給大家分享的是有關(guān)使用Fly怎么攔截全局Ajax請求,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)絡(luò)空間、營銷軟件、網(wǎng)站建設(shè)、青云譜網(wǎng)站維護、網(wǎng)站推廣。
原理
無論你的應(yīng)用是通過那個框架或庫發(fā)起的 Ajax 請求,最終都會回歸到 XMLHttpRequest 。 所以,攔截的本質(zhì)就是替換瀏覽器原生的 XMLHttpRequest 。具體就是,在替換之前保存先保存 XMLHttpRequest,然后在請求過程中根據(jù)具體業(yè)務(wù)邏輯決定是否需要發(fā)起網(wǎng)絡(luò)請求,如果需要,再創(chuàng)建真正的 XMLHttpRequest 實例。
Fly 攔截全局ajax
如果您還不了解 fly, 請參考其官網(wǎng):https://wendux.github.io/dist/#/doc/flyio/readme
我們知道,在 Fly 中,XMLHttpRequest 就是一個http engine。所以我們要攔截,只需要自定義一個engine替換掉全局的XMLHttpRequest 就行,而 Fly 提供了快速生成 engine 的工具,所以我們可以很方便實現(xiàn)攔截。
我們先看一個簡單的例子,功能是輸出每次網(wǎng)絡(luò)請求 url 和 method。
實現(xiàn)
var log = console.log; //切換fly engine為真正的XMLHttpRequest fly.engine = XMLHttpRequest; var engine = EngineWrapper(function (request, responseCallback) { console.log(request.url, request.method) //發(fā)起真正的ajax請求 fly.request(request.url, request.data, request) .then(function (d) { responseCallback({ statusCode: d.engine.status, responseText: d.engine.responseText, statusMessage: d.engine.statusText }) }) .catch(function (err) { responseCallback({ statusCode:err.status, statusMessage:err.message }) }) }) //覆蓋默認(rèn) XMLHttpRequest = engine; axios.post("../package.json").then(log)
我們用 axios 發(fā)起一個請求測試一下:
axios.post("../package.json").then(log) //控制臺輸出 > http://localhost:63341/Fly/package.json POST > {data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
可以看到控制臺中輸出了請求的 url 和 method,我們的攔截成功了。而 第二行的結(jié)果對象是axios then打印出的。
因為 Fly支持切換engine, 我們可以直接先將 fly engine 切換為真正的 XMLHttpRequest ,然后再覆蓋,這樣fly中的網(wǎng)絡(luò)請求都是通過真正的 XMLHttpRequest 發(fā)起的 (事實上, 瀏覽器環(huán)境下 fly 默認(rèn)的 engine本就是 XMLHttpRequest,無需手動切換,此處為了清晰,故手動切換了一下)。fly 會根據(jù)request對象自動同步請求頭。如果想阻止請求,直接在 adapter 中 return 即可。
其它攔截方法
Github上的開源庫 Ajax-hook 也可以攔截全局的的ajax請求,不同的是,它可以攔截ajax請求的每一步,每一個回調(diào),不僅強大,而且也很輕量(1KB)。和上面通過 fly engine 攔截的方式相比 ,Ajax-hook的攔截粒度更細,但Ajax-hook由于使用了ES5的 getter、setter,所以不支持IE9以下的瀏覽器。
以上就是使用Fly怎么攔截全局Ajax請求,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享名稱:使用Fly怎么攔截全局Ajax請求
文章鏈接:http://m.kartarina.com/article32/jecdsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、App開發(fā)、建站公司、網(wǎng)站內(nèi)鏈、云服務(wù)器、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)