天天看點

ajax success function_jQuery的AJAX響應攔截

ajax success function_jQuery的AJAX響應攔截

新革命碰上了老問題。

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來相容低版本浏覽器

ajax success function_jQuery的AJAX響應攔截
ajax success function_jQuery的AJAX響應攔截

繼續閱讀