透過JS 攔截全域ajax請求實例解析
你是否有過下面的需求:需要給所有ajax請求添加統一簽名、需要統計某個接口被請求的次數、需要限制http請求的方法必須為get或post、需要分析別人網絡協議等等,那麼如何做?想想,如果能夠攔截所有ajax請求,那麼問題就會變的很簡單!
Ajax-hook源碼位址: https://github.com/wendux/Ajax-hook
如何使用
1.引入ajaxhook. 。
<script src="wendu.ajaxhook.js"></script>
ok, 我們使用jQuery(v3.1) 的get方法來測一下:hookAjax({
//拦截回调
onreadystatechange:function(xhr){
console.log("onreadystatechange called: %O",xhr)
},
onload:function(xhr){
console.log("onload called: %O",xhr)
},
//拦截函数
open:function(arg){
console.log("open called: method:%s,url:%s,async:%s",arg[0],arg[1],arg[2])
}
})
// get current page source code $.get().done(function(d){ console.log(d.substr(0,30)+"...") })
攔截成功了! 我們也可以看到jQuery3.1內部已經放棄onreadystatechange而改用onload了。
API
hookAjax(ob)
1.ob,類型是對象,key為想要攔截的回呼或函數,value為我們的攔截函數。 2.傳回值: 原始的 XMLHttpRequest。如果有寫請求不想被攔截,可以new 這個。
unHookAjax()1.載攔截;卸載後,攔截將失效。 改變ajax行為
攔截所有ajax請求,檢測請求method,如果是“GET”,則中斷請求並給出提示
> open called: method:GET,url:http://localhost:63342/Ajax-hook/demo.html,async:true > onload called: XMLHttpRequest > <!DOCTYPE html> <html> <head l...
攔截所有ajax請求,請求統一添加時間戳
hookAjax({ open:function(arg){ if(arg[0]=="GET"){ console.log("Request was aborted! method must be post! ") return true; } } })
修改請求返回的數據「responseText」
hookAjax({ open:function(arg){ arg[1]+="?timestamp="+Date.now(); } })
結果:
hookAjax({ onload:function(xhr){ //请求到的数据首部添加"hook!" xhr.responseText="hook!"+xhr.responseText; } })
有了這些範例,相信開頭提到的需求都很容易實現。最後測一下unHook
hook!<!DOCTYPE html> <html> <h...
hookAjax({ onreadystatechange:function(xhr){ console.log("onreadystatechange called: %O",xhr) //return true }, onload:function(xhr){ console.log("onload called") xhr.responseText="hook"+xhr.responseText; //return true; }, open:function(arg){ console.log("open called: method:%s,url:%s,async:%s",arg[0],arg[1],arg[2]) arg[1]+="?hook_tag=1"; }, send:function(arg){ console.log("send called: %O",arg[0]) } }) $.get().done(function(d){ console.log(d.substr(0,30)+"...") //use original XMLHttpRequest console.log("unhook") unHookAjax() $.get().done(function(d){ console.log(d.substr(0,10)) }) })
注意
1.攔截函數回傳值是一個boolean,如果為true則會阻斷ajax請求,默認為false,不會阻斷請求。
2.所有的回調攔截函數的參數為當前的XMLHttpRequest 實例,如onreadystatechange、onload;所有ajax原始方法的攔截函數會將原始參數以數組的形式傳遞給攔截函數,你可以在攔截函數中修改它。
相關文章:

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

快手作為一款熱門的短影片社群平台,讓用戶可以輕鬆地與其他人建立聯繫。隨著時間的積累,用戶的私訊可能會充斥著大量的陌生人訊息,這可能會影響到用戶的體驗。那麼,要如何刪除快手上的陌生人私訊呢?本文將詳細介紹在快手平台上刪除陌生人私訊的方法,以及是否可以攔截陌生人訊息。一、快手私訊怎麼全部刪除陌生人訊息? 1.首先,打開快手APP,進入個人中心。 2.在個人中心頁面,找到「訊息」選項,點選進入。 3.在訊息頁面,找到「私訊」選項,點選進入。 4.在私訊頁面,你可以看到不同的訊息分類,找到「陌生人訊息」分類,點選

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

qq瀏覽器怎麼攔截廣告彈窗?最近,有時候我在使用電腦時會常常碰到QQ瀏覽器出現廣告彈窗的現象,像小編碰到的就是QQ瀏覽器彈跳出廣告,那麼遇到這種QQ瀏覽器彈跳窗的廣告該如何解決呢,下面就跟本站小編一起來看看,qq瀏覽器怎麼攔截廣告彈窗吧。解決QQ瀏覽器彈跳窗廣告的教學1、先打開qq瀏覽器,進入主介面後,點選右上角的選單。 2.點開QQ瀏覽器的選單後,會看到一個應用程式中心,然後點選它。 3.進入QQ瀏覽器應用中心後,會彈出一個擴充商店。 4.安裝QQ瀏覽器攔截廣告彈跳窗的插件。 5.點選立即安裝。 6.安裝成

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。
