最近開(kāi)發(fā)遇到一個(gè)問(wèn)題:需要把項(xiàng)目所有ajax請(qǐng)求的參數(shù)加上一個(gè)隨機(jī)數(shù)(用于清緩存),但是項(xiàng)目有40多個(gè)ajax請(qǐng)求,不想手動(dòng)去修改,于是自己想試著修改jQuery的ajax源碼,最后也達(dá)到目的了,不過(guò)想問(wèn)問(wèn)有沒(méi)有更好的方法。(我猜應(yīng)該是有的。。)
jQuery是v3.1.1
找到ajax函數(shù)修改為:
ajax: function( url, options ) { if(url.data != undefined) url.data.random = Math.random(); else url.data = {random:Math.random()};··· (省略號(hào)后面是jQuery寫(xiě)ajax的500多行源碼) }
思路就是這樣。。很簡(jiǎn)單粗暴的直接改源碼。
當(dāng)然我一開(kāi)始是打算用extend來(lái)修改的,比如:
$.extend($, {ajax: function( url, options ) { if(url.data != undefined) url.data.random = Math.random(); else url.data = {random:Math.random()};··· (省略號(hào)后面是jQuery寫(xiě)ajax的500多行源碼) } }
這個(gè)方法行不通是因?yàn)閍jax內(nèi)部的源碼還包括其他的函數(shù),這樣我不確定要怎么復(fù)寫(xiě)(難道要把a(bǔ)jax函數(shù)里面的所有其他函數(shù)也extend進(jìn)去?)
所以,我想問(wèn)有沒(méi)有一個(gè)方法,可以讓我在$.ajax.prototype上加幾行代碼就實(shí)現(xiàn)攜帶隨機(jī)參數(shù)的做法?
===============編輯:以下是采用了 邊城 大神給出的思路 很方便=========
$.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);
把代碼寫(xiě)在公共組件里面就可以了.