![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZhhjM2YGZ3E2NhNmZ5UzMwEDO4MDOhZTYiRGZxkzY08CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
新革命碰上了老問題。
Once upon a time,有一個主要用jQuery的老項目。Now,老項目要整改,針對響應内容要做編碼預處理,如果對散落在各處的代碼做修改将會費時費力。衆所周知,像現代Ajax庫都帶了攔截功能,以axios為例
// 添加請求攔截器
jQuery Ajax的請求加工倒是好處理,因為有一個beforeSend的鈎子,把它設在全局Ajax的配置裡就行了,但對于響應結果預處理一時間沒有找到合适的API。
.ajaxSuccess( )
一開始想用這個Ajax全局事件,但嘗試後發現這個事件的觸發比$.ajax( )裡的success晚,并且這個API設計出來感覺上是和ajax( )方法裡的success回調互相獨立的。
AOP
然後開始翻源碼,期望用AOP的形式改寫。比如像這樣的
var
一開始找到了個jQuery.parseJSON,然後改寫它,但怎麼都不能試成功,通過斷點debug發現改寫的是已經暴露出來的jQuery.parseJSON,而jQuery的IIFE内部隻會調用到原來的jQuery.parseJSON,不過在這個找尋的過程中發現了解決方案。
converters
ajax( )有個配置項叫converters,它的預設值是
converters
它定義了從一種格式轉成另一個格式的處理方法,可以在請求的時候改寫它。
在百度首頁進行嘗試,百度首頁引入了jQuery-1.12來相容低版本浏覽器