比如说页面查询条件有7个,
在以前用struts2做项目的时候,如果点2次提交按钮,它会查询两次,页面也会刷新2次,不会有两遍一样的数据放到页面里。但是现在是点击提交按钮,数据是用ajax返回到前台页面的。
如果点2次,就会查询2次。页面就会多一遍一样的数据。我通过js验证,自己加判断也可以做到防止提交等等。但是总是觉得这样写很不方便。我有7个查询条件(可以输入,可以为空)。如果第一次输入完查询条件,查询,再次点击查询会alert(“不要重复提交”),如果有一个查询条件变化了,就清空页面的数据,重新进数据库查询。(有些输入框没输入值,第二次输入了,要做的判断太多,undefined等等)。
所有页面都是ajax提交的,自己做判断写比较蛋疼,而且容易出现bug。有么有人有好的方法,求大神指导一下?

解决方案 »

  1.   

    设置一个中间变量 提交的时候设置为true;在提交的时候验证还是true 报错。
      

  2.   

    提交一次之后 禁用按钮。。this.disable=true;
    或者设置一个标志 提交完后设为false  提交前判断是否为true  
      

  3.   

    struts2有一个令牌。可以试试那个。token
      

  4.   

    用token:Token原理:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
      

  5.   


    但是这样会带来一个问题,因为页面是异步刷新的,
    在改变输入框值的时候,由于,提交完之后为false,
    再次点提交,依然是false,会导致无法提交。
    除非再一次对每个输入框作check,把那个变量再次变为true。
      

  6.   

    楼主你想的太复杂了,没必要那样。
    给你个思路:可以做的跟struts2一样,只要点击查询,就清空所有数据,重新查询。
    只不过是异步刷新是struts2.
      

  7.   

    如果是查询的话,重复提交,有什么关系?你说会有多一遍数据是什么意思,一般是清空上一次查询出的数据,再插入本次的数据,最多就是服务器的压力大了一些jquery.showLoading。这个js就有防止重复点击的作用
      

  8.   

    页面某些文本框为空的情况,写好sql语句应该就行!
      

  9.   

    网上有写好的JQuery的代码。。
    如果楼主想进行提示的话,那么恐怕就得自己写JS,使用标记位一类的手段了。$.ajax({
                    type:'post',
                    url:'LibraryBooks_data.php',
                    data:params, 
                    dataType: 'json',
                    async:false, 
                    success: function (a)
                    {          
                     if(a.action=='ture'){                         $.success('操作成功!');                   }
                       
                      
                    }
              });