Ajax 提交表单有时有效,有时直接重定向到操作网址

Ajax submit Form sometimes works, sometimes redirects to the action-url directly

本文关键字:重定向 操作 提交 表单 有效 Ajax      更新时间:2023-09-26

我在表格中显示了很多带有foreach循环的课程!每门课程都有自己的表格,带有ID和提交按钮!

<form id="kurs<?php echo $result["ID"]; ?>" name="kurs<?php echo $result["ID"]; ?>" action="test.php" method="POST">
...form-field..
<input type="submit" id="submitid" name="submit" class="btn btn-success btn-sm" value="Aktualisieren">
</form>

下面(在foreach内部)有这个脚本:

$("#submitid").click(function() {
  $("#kurs<?php echo $result['ID']; ?>").submit(function(e) {
    var postData = $(this).serialize();
    var formURL = $(this).attr("action");
    $.ajax({
      url: formURL,
      type: "POST",
      data: postData,
      success: function(data) {
        $('#item-<?php echo $result["ID"]; ?>').addClass('bg-success border');
        setTimeout(function() {
          $('#item-<?php echo $result["ID"]; ?>').removeClass('bg-success border')
        }, 1500);
      }
    });
    e.preventDefault(); //STOP default action
    e.unbind(); //unbind. to stop multiple form submit.
  });
});
$("#kurs<?php echo $result['ID']; ?>").submit(); 

问题是它只工作 50%?

一半的时间表单正常提交,我登陆测试.php页面,其他时间,数据更新,行闪烁绿色几秒钟,因为它应该是!

当它

起作用时它有效,当它不起作用时,我可以重新加载,也许然后它有效!

有人有想法吗?

编辑:我发现如果我通过单击第一个输入开始所有内容,一切正常。如果我从另一行开始,它不起作用!

问题是它只工作 50%?一半的时间表单正常提交,我登陆测试.php页面,其他时间,数据更新,行闪烁绿色几秒钟,因为它应该是!

我不明白为什么你有两个相同的.submit()处理程序......

$("#submitid").click(function() {
      $("#kurs<?php echo $result['ID']; ?>").submit(function(e) {
          .....
          // your ajax()
          .....
      });
});
$("#kurs<?php echo $result['ID']; ?>").submit(); // <-- same as above

一个在您的click处理程序内部并包含ajax(),另一个位于click处理程序之外,并且只会提交到默认表单action。 因此,完全可以理解的是,如果您的ajax()到达的速度不够快,那么代码执行将到达第二个提交处理程序并提交到默认action。 无论哪个.submit()处理程序首先到达,都是获胜的那个......在你的情况下,真的是抛硬币。

表单中已经有一个真正的提交按钮,因此绝对没有理由使用任何click处理程序函数,当然也没有理由使用两个submit处理程序。

只需这样做...

$("#kurs<?php echo $result['ID']; ?>").submit(function(e) {
      e.preventDefault();
      var postData = $(this).serialize();
      var formURL = $(this).attr("action");
      $.ajax({
           ....
      });
});
在你的

js submit函数的第一行放e.preventDefault()

好的,

我想我有问题了!

也许这不是最好的方法,我有嵌套函数,但我不知道如何以其他方式做到这一点,所以对我来说没关系;)

我还必须在提交按钮中添加唯一的 ID。

<input type="submit" id="submitid<?php echo $result["ID"]; ?>" name="submit" class="btn btn-success btn-sm" value="Aktualisieren">

             $("#submitid<?php echo $result['ID']; ?>").click(function() {