Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么jqueryajax要多次提交表单?_Javascript_Php_Jquery_Ajax_Forms - Fatal编程技术网

Javascript 为什么jqueryajax要多次提交表单?

Javascript 为什么jqueryajax要多次提交表单?,javascript,php,jquery,ajax,forms,Javascript,Php,Jquery,Ajax,Forms,我读过: 这没用 如果我在表单上键入一些内容并单击submit按钮,那么它将发送一个请求。第二次,如果我键入某个内容并单击它,它将发送两个请求。第三次发送三个请求,以此类推。为什么会这样?我在jquery代码中犯了什么错误吗 这是我的密码: index.php=> <div id="id_div_1" class="cl_div_comment_container"></div> <form id="id_form_1" method="POST"> <

我读过:

这没用

如果我在表单上键入一些内容并单击submit按钮,那么它将发送一个请求。第二次,如果我键入某个内容并单击它,它将发送两个请求。第三次发送三个请求,以此类推。为什么会这样?我在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>
save-comment.php=>

<?php

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

echo json_encode($_POST);
?>

试试
一个
然后
打开

$("#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);
        }
    });

});

同样无需进行submit
bind
只需序列化最近的表单并调用
ajax
。您在内部绑定事件,事件执行多个绑定

您在为
单击按钮上的
事件的代码中注册表单
提交
的事件。因此,每次单击该按钮时,它都会一次又一次地添加事件

这应该足够好了

$(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);
                }
        });

   });

});
您可以尝试以下方法:

$(document).off().on("click","#submit",(function(e) {  
        e.preventDefault();
}

你可以避开这条线$(frm).on('submit',函数(e){}每次单击后添加一个新的表单提交处理程序每次ajax调用也会在每次单击时再次评估相同的js文件。因此,两个单击处理程序和两个ajax调用,然后是三个,然后是四个,等等……无需将submit
bind
just
Serialized
序列化为最近的表单并进行
ajax调用。太好了!我有相同的issue:在datatable按钮单击中提交表单。每次执行单击时,提交事件都会增加。现在,有了这个解决方案,它工作得很好!多亏了这个,我从头部拔出了很多头发。我也有表单。提交内部单击事件,它在单击时一直在复制。我吸取了教训。这非常有效对我来说,
点击
会打开一个模式窗口,然后在该模式中有一个表单供用户提交
。因此('submit')上的
被更改为
one('submit')
,以便它工作
$(document).off().on("click","#submit",(function(e) {  
        e.preventDefault();
}