Ajax异步请求重复提交【三】

概要:
本篇内容开始介绍Ajax异步请求按钮在短时间内被重复点击,如何避免数据被覆盖的问题。经
过思考我们能够发现,解决这个问题的核心就是:保证一次请求的开始到结束的时间段内,按
钮不能在这个时间内再次发送请求。

第一种方案:
(1)给按钮加个开关:当按钮被点击时,disable禁用按钮;在回调函数中enable激活按钮(缺点:万一服务器超时或者挂掉了,按钮就不能被激活了)。

前端代码:

//测试
var isQuery = false;//设置一个请求开关
function bindBtnCheckOperation() {
    debugger;          
    var url = sysAreas + controller + "/Check"
    if (!isQuery) {
        $.ajax({
            type: 'POST',
            url: url,
            contentType: "application/json",                
            dataType: 'json',
            timeout:300,
            beforeSend: function (XMLHttpRequest) {
                debugger;
                isQuery = true;
                this;//调用本次ajax请求时配置的options参数,下面每个回调方法都适应。
            },
            complete: function (XMLHttpRequest, textStatus) {
                debugger;
                isQuery = false;                    
            },
            success: function (data, textStatus) {
                debugger;
                isQuery = false;//本次请求成功完成时,重置激活按钮

            },
            error: function (data) {
                debugger;
                isQuery = false;//本次请求发生错误时,重置激活按钮
            }
            });
    } else {
        alert("请求处理中...");
    }
}

后端代码:

public ActionResult Check()
{
    message ="我从密室逃脱啦!";
    return Json(new { message=message},JsonRequestBehavior.AllowGet);
}

第二种方案:其实是对第一种方案的补充。当服务器超时或者是挂掉了,那么我们就要终止本次请求。注意在上面回调方法中加的几个参数。
XMLHttpRequest:参数可以实时获取到本次请求的状态,并且还有一些可以调用abort()终止本次请求的方法。
this:参数是可以获取本次请求ajax配置的options参数,最好的一点能够获得timeout值,帮助我们判断超时的情况。
下面看debug过程。
这里写图片描述

这里写图片描述

这里写图片描述

第三种方案:思路是,给按钮点击事件,添加定时器。设置在一定毫秒ms时间间隔内点击无效。超过这个时间间隔激活按钮。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值