2015-06-13 48 views
0

这里是我的代码:为什么多次执行Ajax post请求?

$(document).ready(function(){ 
      $("#mainbutton").click(function(){ 
       $("#ajaxform").submit(function(e){ 
        var info = $(this).serialize(); 
        $.ajax(
        { 
         url : "userctrl", 
         type: "post", 
         data : info, 
         success:function(data, textStatus, jqXHR) 
         { 
          console.log("success"); 
          $('.valid-error').html(data); 
         }, 
        }); 
        e.preventDefault() 
       }); 
       $("#ajaxform").submit(); //Submit the form 
      }); 
     }); 

和我的HTML

 <form id="ajaxform"> 
     <input type="hidden" name="action" value="submit"/> 
     <input type="text" placeholder="Name" name="name" id="name" /><span></span> 
     <input type="text" placeholder="Surname" name="surname" /><span></span> 
     <input type="text" placeholder="Address" name="address" /><span></span> 
     <p class="valid-error"></p> 
     <input id="mainbutton" class="mainbutton" type="button" value="trial"/> 
     </form> 

执行这一要求多次取决于哪些字段被填满。如果我填充两个字段将被执行3次,如果我填充3个字段4次。这并非总是如此,但绝对是我的servlet中的doPost方法被多次调用......我只点击一次提交按钮!!!为什么?

+0

每次点击你要绑定一个新的提交事件 –

+0

是的,但我点击一次 – oronaparcali

+0

林不知道你是怎么检查它,但我想你做错了,并提防表格可以提交使用输入或空格在某些情况下,没有单击按钮,您的提交处理程序不会被称为 –

回答

2

因为每次都是单击该按钮,您将在窗体中添加更多的submit处理程序。任何时候当你发现自己在之内挂接了另一个事件处理函数中的事件处理函数时,你就要仔细考虑是否真的想要你想做的事(通常不是)。

挂钩submmitclick处理程序:

$(document).ready(function() { 
    $("#ajaxform").submit(function(e) { 
     var info = $(this).serialize(); 
     $.ajax({ 
      url: "userctrl", 
      type: "post", 
      data: info, 
      success: function(data, textStatus, jqXHR) { 
       console.log("success"); 
       $('.valid-error').html(data); 
      }, 
     }); 
     e.preventDefault() 
    }); 
    $("#mainbutton").click(function() { 
     $("#ajaxform").submit(); //Submit the form 
    }); 
}); 
+0

thx这是解释。只要问你这个函数$(document).ready(function() - 它不是多余的? – oronaparcali

+0

@oronaparcali:它是如果你遵循标准的网页优化建议,并把你的脚本标签放在你的**结尾** HTML,在关闭''标记之前,是的,如果你不遵循这个建议,如果你的脚本超出了它在HTML中作用的元素,你可能需要使用'ready'。 –

+0

谢谢。我还有最后一个问题,如果我想在重定向或转发请求到另一个页面后成功ot ajax请求 - 我怎么能做到这一点?对很多问题:) – oronaparcali