概要:
本篇内容开始介绍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时间间隔内点击无效。超过这个时间间隔激活按钮。