我是靠谱客的博主 炙热服饰,最近开发中收集的这篇文章主要介绍struts2造成的多次提交和ajax调用不进入后台问题发现和解决,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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){
         
        }
    });

最后

以上就是炙热服饰为你收集整理的struts2造成的多次提交和ajax调用不进入后台问题发现和解决的全部内容,希望文章能够帮你解决struts2造成的多次提交和ajax调用不进入后台问题发现和解决所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部