表单多次提交,尽管它被阻止了


forms submits multiple times though its prevented

这是我的脚本:

$("#search").on("click", function () {
  $("#search_tutor").submit(function () {
      data = $(this).serialize() + "&" + $.param(data);
      $.ajax({
          type: "POST",
          dataType: "json",
          url: "fetch_tutor.php",
          data: data,
          success: function (data) {
              alert(data);
          }
      });
      return false;
  });
});

我面临的问题是:

当我第一次单击$("#search")时,alert(data);会出现一次。当我第二次单击$("#search")时,alert(data);出现两次。所以,当我点击以下次数时,就会发生这种情况。根据我点击$("#search")的次数,alert(data);会出现多少次。根据我的理解,这表明$("#search_tutor")是多次提交的。这是因为我在ajax函数之后使用了return false来防止页面重新加载。但当我刷新页面时,alert(data);只出现一次。我试过了:

1) 删除了return false,但它重新加载了页面,我不希望发生这种情况,因为它没有将我从ajax调用中收到的结果附加到指定的div。

这没有任何改变
2)

 $("#search_tutor").submit(function(event){
                event.preventDefault();

这不允许在单击按钮后发生任何事情
3)

$("#search").on("click",function(event){
    event.preventDefault();

我能想到的唯一解决方案是,在每次ajax调用后重新加载页面,但需要将ajax的结果附加到指定的div中。但我该怎么做呢?

问题是您在点击处理程序中注册提交处理程序,因此每次点击按钮都会注册一个新的提交处理程序。

因此,第二次单击按钮将调用提交处理程序两次,发送ajax请求两次。

不需要使用点击处理程序,只需使用提交事件

$("#search_tutor").submit(function() {
  var data = $(this).serialize() + "&" + $.param(data);
  $.ajax({
    type: "POST",
    dataType: "json",
    url: "fetch_tutor.php",
    data: data,
    success: function(data) {
      alert(data);
    }
  });
  return false;
});