[网络整理][转载][记个笔记]利用jquery ajaxPrefilter防止ajax重复提交

知乎讨论: https://www.zhihu.com/question/19805411

代码实现: https://www.cnblogs.com/godLike7/p/6807256.html

原作者采用方案ajaxPrefilter:

上代码:

端代码是当输入密码个数为6个的时候,触发ajax请求,但输入很快的时候会触发多个请求,为了防止重复发送请求
可以利用jquery ajaxPrefilterzhong中断请求

局限性:仅仅对jquery 发送的ajax请求有作用

调用abort后jquery会执行error的方法,抛出abort的异常信息。可以使用以下方式区分出该类型的异常。

error:function(jqXHR, textStatus, errorThrown){
    if(errorThrown != 'abort'){
        //ajax被调用abort后执行的方法
        alert('应用加载失败!');
    }
}
Demo:

//工具:
var pendingRequests = {};
jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    var key = options.url;
    if (!pendingRequests[key]) {
        pendingRequests[key] = jqXHR;
    }else{
        jqXHR.abort(); //放弃后触发的提交
        //pendingRequests[key].abort(); // 放弃先触发的提交
    }

    var complete = options.complete;
    options.complete = function(jqXHR, textStatus) {
        pendingRequests[key] = null;
        if (jQuery.isFunction(complete)) {
            complete.apply(this, arguments);
        }
    };
});
//示例:
$.ajax({
    type:"post",
    url:url,
    data:{"act":"checkpwd","password":pwd},
    dataType:"json",
    success:function(request){
        if(request.statu == 0){
            Air_View("支付密码错误");
        }else{
            $("#walletpay").submit();
        }

    },
    error:function(jqXHR, textStatus, errorThrown){
        if(errorThrown != 'abort'){
            //ajax被调用abort后执行的方法
            alert('应用加载失败!');
        }
    }
});
效果: 执行ajax,在上一个ajax(相同url)未得到回应前,不会再次发送请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值