1.struts2多次提交 这种情况发生在网络较慢时,现象是前端ajax调用一次struts2接口,因为网速较慢,struts2自动调用了多次某接口。这种情况对于提交操作很要命,会出现以下两种情况造成
1.struts2多次提交
这种情况发生在网络较慢时,现象是前端ajax调用一次struts2接口,因为网速较慢,struts2自动调用了多次某接口。这种情况对于提交操作很要命,会出现以下两种情况造成体验差:
1.显示失败,实际成功(发生在首次提交失败,后续成功的情况,后续成功不会返回前端正确数据)
2.显示成功,数据多条(这个问题很严重,用户下了一张单结果显示多条,系统管理方面也不好操作)
处理方法
- 简单方法:获取数据库唯一值【存在限制】
存在30秒内各项数据都相同的单,就update,否则insert,这个时间可以根据自己的需求来定,此方法的限制是,数据表内必须存在唯一主键和更新日期,不然用不了 - 复杂方法:使用token【通用】
1.session中使用token保存,然后使用时进入方法则删除token
js创建token接口,提交前先设置session:
.ajax({type: type,
url:path,//此处进入后台设置token
data: data,
dataType:dataType,
success:function(d){
},
error:function(e){
}
});
后台:
public void someMethod(){request.getSession().setAttribute("submit","1");
}
提交:
public void submit(){String data = request.getSession().getAttribute("submit");
if(data == null){
return;
}else{
request.getSession().setAttribute("submit",null);
//进行提交操作
}
}
2.ajax不进入后台
此情况出现在比较特殊的加入购物车的情况,就是同一个页面,点击加入购物车,要每一次响应后台。经测试,微信开发者工具清除缓存后,首次加入购物车都是可以成功的,之后有时候成功,有时候不成功。经查,发现是ajax存在缓存,除了首次,其他情况可能根本就直接从缓存取数据,此特殊情况应使用无缓存:
.ajax({type: type,
url:path,
data: data,
cache:false,//此处设无缓存
dataType:dataType,
success:function(d){
},
error:function(e){
}
});