最近开发遇到一个问题:需要把项目所有ajax请求的参数加上一个随机数(用于清缓存),但是项目有40多个ajax请求,不想手动去修改,于是自己想试着修改jQuery的ajax源码,最后也达到目的了,后来又优化(或者说改进)了一下方法,在博客上mark下以后用。
首先是用来的做法:
ajax: function( url, options ) {
if(url.data != undefined)
url.data.random = Math.random();
else
url.data = {random:Math.random()};
···
(省略号后面是jQuery写ajax的500多行源码)
}
比较简单粗暴直接修改jQuery的ajax源码,然后打包就可以实现目的
但带来问题是:后续修改不方便,以及如果是不使用打包工具,比如直接用jquery.min.js的同学,他可能进行修改就很痛苦了。
后来在SF社区找到一个方案,复写$.ajax函数,代码是:
$.ajax = (function(ajax) {
return function(url, data) {
url.data != undefined ?
url.data.randomnumber = Math.random() :
url.data = {randomnumber:Math.random()};
return ajax.call($, url, data);
};
})($.ajax);
这样,即便是用jquery.min.js也可以直接在文件后面加上这段代码,后续修改起来也很方便。