一種攔截AJAX資料的方法
阿新 • • 發佈:2019-01-31
一個實際運營中的產品,突然遇到了這樣的展示需求:
在前端攔截所有的AJAX請求,將其中的XXX電力局字樣全部改為XXX水利局字樣。
首先想到的是利用jQuery的全域性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);
})
經過測試,完全能夠達到演示效果,區區幾行程式碼,就替代了後端繁瑣的資料更新工作。