javascript - 修改jQuery ajax.js源码的一个问题
本文介绍了javascript - 修改jQuery ajax.js源码的一个问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最近开发遇到一个问题:需要把项目所有ajax请求的参数加上一个随机数(用于清缓存),但是项目有40多个ajax请求,不想手动去修改,于是自己想试着修改jQuery的ajax源码,最后也达到目的了,不过想问问有没有更好的方法。(我猜应该是有的。。)
jQuery是v3.1.1
找到ajax函数修改为:
ajax: function( url, options ) {
if(url.data != undefined)
url.data.random = Math.random();
else
url.data = {random:Math.random()};
···
(省略号后面是jQuery写ajax的500多行源码)
}
思路就是这样。。很简单粗暴的直接改源码。
当然我一开始是打算用extend来修改的,比如:
$.extend($, {ajax: function( url, options ) {
if(url.data != undefined)
url.data.random = Math.random();
else
url.data = {random:Math.random()};
···
(省略号后面是jQuery写ajax的500多行源码)
}
}
这个方法行不通是因为ajax内部的源码还包括其他的函数,这样我不确定要怎么复写(难道要把ajax函数里面的所有其他函数也extend进去?)
所以,我想问有没有一个方法,可以让我在$.ajax.prototype上加几行代码就实现携带随机参数的做法?
===============编辑:以下是采用了 边城 大神给出的思路 很方便=========
$.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);
把代码写在公共组件里面就可以了.
解决方案
一般我比较喜欢定义一个自己的方案,比如 $.myAjax
,或者写在自己的应用类里面如 app.ajax
,项目里都用这个。
不过你的想法也是可以实现的,只是要稍麻烦一点(只是写个思路,没去调试)
$.ajax = (function(ajax) {
const defaultData = {
first: "one",
second: "two",
third: "three"
};
return function(url, data) {
data = $.extend({}, defaultData, data);
return ajax.call($, url, data);
};
})($.ajax);
这篇关于javascript - 修改jQuery ajax.js源码的一个问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文