当前位置 : 主页 > 编程语言 > java >

struts2造成的多次提交和ajax调用不进入后台问题发现和解决

来源:互联网 收集:自由互联 发布时间:2022-07-13
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){

}
});


网友评论