再是用ajax提交表单的时候,经常出现重复提交,有通过token的,有提交后跳转页面的。想了解一下现在都有什么方法可以做这个?
你点击按钮的时候,给这个按钮加上一个class
,比如ub-click-able
,如果有这个class
,点击这个按钮不触发Ajax
事件。当Ajax
处理返回之后,你去掉这个class
。
提交后加 disabled 属性。
var loginwrap = parent,
btn = self,
nameInput = loginwrap.find('input[name=name]'),
pwdInput = loginwrap.find('input[name=pwd]'),
nameError = nameInput.siblings('.errorMsg'),
pwdError = pwdInput.siblings('.errorMsg'),
name = nameInput.val(),
pwd = pwdInput.val();
$.ajax({
type: 'POST',
url: url,
timeout: 3000,
data: {
name: name,
pwd: pwd
},
beforeSend: function () {
nameError.text('');
pwdError.text('');
var checkname = yousi_tool.checkReg('phone', name),
checkpwd = yousi_tool.checkReg('password', pwd);
if (checkname !== true) { //手机号检测有误
nameError.text(checkname);
return false;
}
if (checkpwd !== true) { //密码检测有误
pwdError.text(checkpwd);
return false;
}
btn.text('登录中').attr('disabled', 'disabled');
},
success: function (data) {
if (data.code == 200) {
} else {
pwdError.text(data.desc);
}
btn.text('登录').removeAttr('disabled');
},
error: function () {
btn.text('登录').removeAttr('disabled');
pwdInput.siblings('.errorMsg').text('网络请求有误,请检查网络后再次登录');
}
})
这是个大问题,服务器端最好还是要有检查策略,一般关键性的,容易重复提交的request会通过一些参数来保证是合法客户端合法用户的合理请求,像淘宝前端是采集你的各种操作、当前时间、随机码等等来拼成一个token,后端有对应算法来验证这个,保证你没法重复提交。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
ajax 防止重复提交处理:
客户端:
1. disabled 提交按钮
2. 定义个变量 var hasSubmit = false,来处理。
服务端:
.....................