页面按钮防止ajax重复提交

这两天在做一个项目,页面交互非常多,到处都是ajax,测试时发现点击按钮是很有可能重复请求ajax,看网上说加锁的方法,不过我也有一个方法,不知道别人用过没,废话不说,我用了CSS中的pointer-events属性,直接上JS代码吧;

`    var formyAjax = false;
    function formy(self) {
        $(".getyaoshi").css("pointer-events", "none");
        console.log("getyaoshi");
        if (formyAjax){
            formyAjax.abort()
        }
        formyAjax = $.post('请求的url', {
            'type': '1'
        },
            function(res) {
            console.log(res);
            if(res.s==200){
                $(".getyaoshi").css("pointer-events", "auto");
                onsole.log("200");
            }

        }, 'json');
    }`

这段代码原理是进行请求时先用css将请求按钮点击效果禁用,请求完后再将修改pointer-events的属性为auto,这样就可以防止因按钮多次点击引起多次ajax请求。

避免AJAX重复提交通常是为了防止用户在同一时间无意间多次触发某个操作,比如表单提交或者数据更新。这不仅可能导致服务器资源浪费,还可能带来用户体验的问题,例如在加载过程中多次刷新页面。以下是几种常用的方法来避免AJAX重复提交: 1. **添加全局防抖动或节流**(Debounce或Throttle): - **防抖**:当用户连续快速触发某个事件时,只有最后一次触发才执行对应的AJAX请求。一旦用户停止输入,函数会等待一段时间后再执行,防止短时间内多次提交。 - **节流**:无论用户如何频繁触发,都只会执行一次请求。通常设定一个固定的时间间隔,如果在这段时间内又有新的触发,那么当前的请求会被取消,直到下一次节流周期结束。 2. **在发起请求前禁用按钮**: 将表单提交按钮或其他触发动作的元素设置为`disabled`状态,直到AJAX请求完成再将其恢复原状。这样用户就不能再次点击它。 3. **利用事件委托**: 对于动态生成的元素,通过事件代理来监听提交事件。这样可以确保不论何时表单提交都是在一个统一的地方处理,避免了因元素添加或移除而产生的重复绑定。 4. **设置提交标志或锁定状态**: 为表单添加一个状态标志,如`formSubmitting`,在开始AJAX请求时置为true,完成后恢复为false。这样,在提交期间不允许再次触发表单的提交事件。 5. **校验前端验证**: 提交之前先在客户端做初步的验证,只有在所有验证通过的情况下才发送AJAX请求。如果前端验证失败,就阻止提交并给出提示,无需发送请求。 6. **服务器端校验**: 服务器也可以验证同一时间是否有重复提交。例如,设置一个token并在客户端和服务器端都保存,只有第一次提交时有效的token才会被执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值