javascript - 修改jQuery ajax.js源码的一个问题
迷茫
迷茫 2017-04-10 17:26:00
[JavaScript讨论组]

最近开发遇到一个问题:需要把项目所有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);

把代码写在公共组件里面就可以了.

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
PHP中文网

一般我比较喜欢定义一个自己的方案,比如 $.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);
黄舟

一般建议抽象一个全局方法出来。经过包装之后。最后调用$.ajax.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号