【问题标题】:Form not getting submitted via AjaxForm/JQuery没有通过 AjaxForm/JQuery 提交表单
【发布时间】:2015-05-05 13:54:58
【问题描述】:

有一个显示项目的表格,每行都有一个“删除”按钮。删除按钮位于表单内。 我正在使用 AjaxForm 方法提交表单。单击删除按钮应该删除数据而不被定向到任何页面或不刷新当前页面。 但是发生的情况是表单以操作标签上定义的常规方式提交。

我通过以下方式在表格上显示结果:

while($row = $result->fetch_assoc()) 
    {               
    ?>  


<tr>
  <td><?php echo  ++$x; ?></td>
  <td><?php echo $row["id"]; ?></td>
  <td><?php echo $row["title"]; ?></td>
  <td><?php echo $row["author"]; ?></td>
  <td>
  <form method="POST" id='deleteform' class="forms" action="deletebook.php">         
  <input type="hidden" name="deletebook" value='<?php echo $row["id"]; ?>' >
  <button type="submit" class="btn btn-danger btn-xs">Delete</button>
  </form>
  </td>
</tr> 


<?php
    }
}

else
{
    echo "No Books Found!";
}

这在way下面显示表格

要通过 AjaxForm 提交表单,操作如下:(这里我没有显示&lt;table&gt; 标签。请原谅。)

<script>
            $(document).ready(function() { 
                $('#deleteform').ajaxForm(function() { 

                    alert("success");

                }); 
                event.preventDefault();
            }); 
    </script>

问题是表单是通过常规方式提交的action="deletebook.php" 相信我在通过 AjaxForm 提交表单的其他页面。但是在这个页面中,问题正在发生。

这可能是因为每个“删除”按钮都是根据表格中的内容显示的表单。 请帮帮我。

编辑:问题不在于无法删除数据。数据之前被删除,现在正在被删除。通过将我发送到deletebook.php 页面,数据将被删除。我希望在不将我发送到任何其他页面的情况下删除数据。

【问题讨论】:

  • ajaxForm() 方法?那是插件的一部分吗?您是否在浏览器的控制台中查看过请求/响应?
  • 这是无效的 html。所有删除按钮都将具有相同的 ID。
  • 你有n数量的id='deleteform',所以你想绑定哪个$('#deleteform').ajaxForm(function() {,因为ids应该是唯一的。班级将成为你的朋友。
  • 您正在使用 event.preventDefault(),但未定义事件,请检查您的控制台
  • @JayBlanchard 对不起,我是新手。是的,它是一个 jquery 插件。如何查看回复?

标签: javascript php jquery forms ajaxform


【解决方案1】:

试试这个方法:

while($row = $result->fetch_assoc()) 
    {               
    ?>  


<tr>
  <td><?php echo  ++$x; ?></td>
  <td><?php echo $row["id"]; ?></td>
  <td><?php echo $row["title"]; ?></td>
  <td><?php echo $row["author"]; ?></td>
  <td>
      <input type="hidden" class="hiddenId" value="<?php echo $row["id"]; ?>" />
  <button type="button" class="btn btn-danger btn-xs">Delete</button>
  </td>
</tr> 


<?php
    }
}

else
{
    echo "No Books Found!";
}

?>

<script>
    var id;

$(document).ready(function(){
    $(".btn-danger").click(function(){
        id = $(this).prev().val();
        $.ajax({
            url: "deletebook.php",
            type: 'post',
            data: {
                "deletebook": id
            }
        }).done(function(response){
            $(".hiddenId[value='" + id + "']").parent().parent().remove();
        });
    });
});
</script>

添加:

$('#addbook').ajaxForm(
{ 
    success: function(responseText, statusText, xhr, $form){
        $('#booksuccess').modal('show'); 
        $("#reset").click(); 
        $("tr").last().append(responseText);
    }
}); 

在你的 php add 方法中,返回一个像这样的字符串:

"<tr><td></td><td>1</td><td>$Title</td><td>$Author</td><td><input type=\"hidden\" class=\"hiddenId\" value=\"$Id\" /><button type=\"button\" class=\"btn btn-danger btn-xs\">Delete</button></td></tr>";

【讨论】:

  • 没用。顺便说一句,这些行之前被删除了。但是在像你显示的那样更改代码之后,行也没有被删除。
  • 为什么不呢?我在 "forms["deleteform"].submit() 之前错过了 "document" 关键字我刚刚更新了上面的代码。我对其进行了测试并且工作正常。
  • 它起作用了,但我现在又回到了原点!数据之前被正确删除。现在也被删了。我想要的是,当我按下删除按钮时,应该删除数据而不将我发送到 deletebook.php
  • 为什么 OP 应该“试试这个”?请添加对您所做的事情以及您这样做的原因的解释,不仅是为了 OP,也是为了 SO 的未来访问者。
  • 我很抱歉。这是您期待的结果吗? nettechlab.info/teste.html
【解决方案2】:

我想你在这里使用 ajaxForm 插件http://malsup.com/jquery/form/#ajaxForm

    $(document).ready(function() { 
        $('#deleteform').ajaxForm(
           {
              beforeSubmit: function(formData, jqForm, options){
                   //show loader
              },
              success:function(responseText, statusText, xhr, $form) { 

                 alert(responseText);
                 //hide loader
              }
           }
        ); 

    }); 

【讨论】:

  • 您的回答成功删除了该行。在我想要一个代码来删除该行而不将我发送到另一个页面之前,我可以做到这一点。无论如何,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2011-04-21
相关资源
最近更新 更多