为什么jquery-ajax多次提交表单?

shi*_*bly 2 javascript php forms ajax jquery

我读了这个: jQuery ajax表单提交了多次

它没有帮助。

如果我在表单上键入内容并单击提交按钮,则它将发送一个请求。第二次,如果我键入内容并单击,它会发送两个请求。第三次发送三个请求,依此类推。为什么是这样?我在jquery代码中做任何错误吗?

这是我的代码:

index.php =>

<div id="id_div_1" class="cl_div_comment_container"></div>
<form id="id_form_1" method="POST">
<input type="hidden" value="1" name="nm_hidden_post_id">
<textarea class="cl_textarea_comment" style="resize:none;" rows="1" cols="50" name="nm_comment_content"></textarea>
<input class="cl_submit_comment" type="submit" value="Comment" name="nm_submit_comment">
</form>
Run Code Online (Sandbox Code Playgroud)

javascript.js =>

$(document).ready(function(){
    console.log('hello');
    $('input[name="nm_submit_comment"]').on('click',function(){
        var frm = $(this).closest("form")[0];
        var frm_id = $(frm).attr("id");
        var frm_id_splitted = frm_id.split("_");
        var frm_id_splitted_2 = frm_id_splitted[2];
        console.log($('div#id_div_' + frm_id_splitted_2));
        $(frm).on('submit',function(e){
            e.preventDefault();
            frm_serialized = $(this).serialize();
            console.log(frm_serialized);

            $.ajax({
                url: "save-comment.php",
                method: "POST",
                data: frm_serialized,
                success: function(data) {
                    console.log(data);
                    $('div#id_div_' + frm_id_splitted_2).append(data);
                }
            });

        });

    });

});
Run Code Online (Sandbox Code Playgroud)

save-comment.php =>

<?php

if (session_id() == '') {
    session_start();
}    

echo json_encode($_POST);
?>
Run Code Online (Sandbox Code Playgroud)

Par*_*edi 6

one然后尝试on

$("#id_form_1").one('submit', function (e) {
    e.preventDefault();
    frm_serialized = $(this).serialize();
    console.log(frm_serialized);

    $.ajax({
        url: "save-comment.php",
        method: "POST",
        data: frm_serialized,
        success: function (data) {
            console.log(data);
            $('div#id_div_' + frm_id_splitted_2).append(data);
        }
    });

});
Run Code Online (Sandbox Code Playgroud)

同样,也无需bind只提交serialize您最近的表格并ajax打电话。您正在绑定事件内部,事件执行multiple binding


Shy*_*yju 6

您正在使用submit的代码在内部注册表单事件click按钮上事件事件。因此,每次您单击按钮时,它都会不断添加事件。

这应该足够好。

$(document).ready(function(){

   $('input[name="nm_submit_comment"]').on('click',function(e){
        e.preventDefault();

        var frm = $(this).closest("form");
        var frm_id = frm.attr("id");
        var frm_id_splitted = frm_id.split("_");
        var frm_id_splitted_2 = frm_id_splitted[2];

        var frm_serialized = frm.serialize();

        $.ajax({
                url: "save-comment.php",
                method: "POST",
                data: frm_serialized,
                success: function(data) {
                    console.log(data);
                    $('div#id_div_' + frm_id_splitted_2).append(data);
                }
        });

   });

});
Run Code Online (Sandbox Code Playgroud)