在某些情况下,由于网络不佳,用户操作有误(连续点击多次提交按钮),页面卡顿等原因,可能会出现请求重复提交,造成数据库保存多条重复数据/查询多次重复sql。
在前端处理方式
交给前端解决,判断多长时间内不能再次点击按钮,或者点击之后禁用按钮,当然,聪明的小伙伴能够绕过前端验证,因此推荐后端进行拦截处理。但是使用查询的 $.table.search()的话可使用:
// 搜索-默认第一个form
search: function(formId, tableId) {
$.modal.loading("正在处理,请稍后...");
table.set(tableId);
table.options.formId = $.common.isEmpty(formId) ? $('form').attr('id') : formId;
var params = $.common.isEmpty(tableId) ? $("#" + table.options.id).bootstrapTable('getOptions') : $("#" + tableId).bootstrapTable('getOptions');
if($.common.isNotEmpty(tableId)){
$("#" + tableId).on('load-success.bs.table', function() {
$.modal.closeLoading();
});
$("#" + tableId).bootstrapTable('refresh', params);
} else{
$("#" + table.options.id).on('load-success.bs.table', function() {
$.modal.closeLoading();
});
$("#" + table.options.id).bootstrapTable('refresh', params);
}
},
另外也可在后端进行拦截
在接口方法上添加 @RepeatSubmit 注解即可,注解参数说明
后端操作:
// 查询方法
@PostMapping("/list")
@ResponseBody
//采用默认参数
@RepeatSubmit
public TableDataInfo list(Xxxx xxxx)
{
startPage();
List<Xxxx> list = xxxxService.selectXxxxList(xxxx);
return getDataTable(list);
}
希望对您有所帮助!