1. 程式人生 > >一種攔截AJAX資料的方法

一種攔截AJAX資料的方法

一個實際運營中的產品,突然遇到了這樣的展示需求:

在前端攔截所有的AJAX請求,將其中的XXX電力局字樣全部改為XXX水利局字樣。

首先想到的是利用jQuery的全域性AJAX方法,但檢索了一遍.ajaxComplete.ajaxSuccess等全域性方法,發現所有的全域性方法都只能對AJAX資料進行只讀操作。難道真的沒有辦法了嗎?

重新複寫$.ajax方法是否可行?應該可以達到目的,但程式碼量可能會比較大,後續的jQuery版本更新也是一件麻煩的事情。

那對$.ajax的success配置建立代理是否可行?這樣代價最小,測試程式碼如下:

var ajax = $.ajax;
//  修改ajax方法的預設實現
$.ajax = function(options) { var success = options.success; // 對使用者配置的success方法進行代理 function ns(datas) { var args = arguments; // 對資料進行處理 var str = JSON.stringify(datas); var rstr = str.replace(/XXX電力局/g, 'XXX水利局'); // 替換回調函式的資料引數 args[0] = JSON
.parse(rstr); // 這裡需要判斷使用者傳入的上下文,具體實現略 return success.apply(this, args); } // 代理嵌入呼叫 options.success = ns; return ajax(options); } // jQuery的所有ajax方法都基於$.ajax方法 $.getJSON('abc.json', function(data) { // 測試資料是否已變更 alert(data.name); })

經過測試,完全能夠達到演示效果,區區幾行程式碼,就替代了後端繁瑣的資料更新工作。