Php jqueryajax:表单提交两次

Php jqueryajax:表单提交两次,php,jquery,ajax,Php,Jquery,Ajax,在我的表单中,我使用ajax提交表单。当我单击submit按钮时,它会执行该方法两次。有人能指导我找出这个问题吗 $("form#dealForm").submit(function(event){ //disable the default form submission event.preventDefault(); var $form = $(event.target); //grab all form data var formData =

在我的表单中,我使用ajax提交表单。当我单击submit按钮时,它会执行该方法两次。有人能指导我找出这个问题吗

$("form#dealForm").submit(function(event){

    //disable the default form submission
    event.preventDefault();

    var $form = $(event.target);

    //grab all form data
    var formData = new FormData($(this)[0]);

    $.ajax({
        url: $form.attr('action'),
        type: 'POST',
        data: formData,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function (returndata) {
            alert(returndata.message);
        }
    });

    return false;
});
html:


这可能不是您的问题,但这里有一些东西需要检查

导致这种问题的一个原因是,您是否已经将html/js注入DOM,无论是通过ajax还是其他方式。例如,如果您的页面上有一个按钮,它将一些html表单代码+js注入到一个div中,然后在一个对话框中显示它供用户完成——诸如此类的事情

当您第一次单击submit按钮时,js将处理一次,然后停止(因此,一次ajax提交)。但是,下次用户填写表单并单击提交时,它将处理/提交两次。下次三点。等等,我已经遇到过很多次了。解决方案是移动js
。单击
。从注入的代码中提交
事件


正如我所说,可能不是你正在经历的,但值得了解。

这可能不是你的问题,但这里有一些东西需要检查

导致这种问题的一个原因是,您是否已经将html/js注入DOM,无论是通过ajax还是其他方式。例如,如果您的页面上有一个按钮,它将一些html表单代码+js注入到一个div中,然后在一个对话框中显示它供用户完成——诸如此类的事情

当您第一次单击submit按钮时,js将处理一次,然后停止(因此,一次ajax提交)。但是,下次用户填写表单并单击提交时,它将处理/提交两次。下次三点。等等,我已经遇到过很多次了。解决方案是移动js
。单击
。从注入的代码中提交
事件


正如我所说,可能不是你正在经历的,但值得了解。

试试这个,如果它起作用,表单会被钩住两次“提交”:

这将解除绑定提交,然后绑定您的操作。如果表单已绑定提交,则只需修复。这是许多可能性之一,可能是因为调用了两次脚本,或者验证插件分别绑定了提交事件

注意:这可能会使您的验证插件或任何其他绑定提交的脚本脱钩


如果这确实为您解决了问题,您应该调查它发生的原因。然后修复该问题,并删除
unbind
命令。它可能会解决此问题,但也可能会在以后导致更多问题。(又名:仅用于调试)

试试这个,如果它有效,表单会被钩住两次“提交”:

这将解除绑定提交,然后绑定您的操作。如果表单已绑定提交,则只需修复。这是许多可能性之一,可能是因为调用了两次脚本,或者验证插件分别绑定了提交事件

注意:这可能会使您的验证插件或任何其他绑定提交的脚本脱钩


如果这确实为您解决了问题,您应该调查它发生的原因。然后修复该问题,并删除
unbind
命令。它可能会解决此问题,但也可能会在以后导致更多问题。(又名:仅用于调试)

此错误感觉不在代码中。必须有两个具有相同id或名称的表单。试试其他浏览器,试试ajax文档就绪的东西。尝试不同的电脑(鼠标:))我看不出任何其他原因会导致这种情况。听起来你要么有两次代码,要么在一个函数中调用了两次。代码不可能自动运行多次。@user2102266即使您有两个ID相同的表单,jQuery也会忽略重复的表单。ID选择器总是只返回第一个匹配项。是否双击“提交”按钮?(这会导致它提交两次)最好禁用提交按钮,直到ajax调用完成。不。这会显示两次警报。无法理解问题。我正在使用引导验证程序。可能是因为此错误感觉不在代码中。必须有两个具有相同id或名称的表单。试试其他浏览器,试试ajax文档就绪的东西。尝试不同的电脑(鼠标:))我看不出任何其他原因会导致这种情况。听起来你要么有两次代码,要么在一个函数中调用了两次。代码不可能自动运行多次。@user2102266即使您有两个ID相同的表单,jQuery也会忽略重复的表单。ID选择器总是只返回第一个匹配项。是否双击“提交”按钮?(这会导致它提交两次)在ajax调用完成之前禁用提交按钮是个好主意。不。这会显示两次警报。无法理解问题。我正在使用引导验证程序。可能是因为奇怪,但这解决了问题。但仍然无法理解另一个提交Fire的位置。您可以开始查看现有代码旁边的内容。在您提供的代码上方,放置一个
警报('Test')
。如果警报触发两次,则该代码将触发两次。然后倒转,直到它不再发射两次。可能是包含提交钩子的函数被调用了两次,甚至jquery初始化也被调用了两次。有很多可能性!到处扔警报!(也可以阅读有关
console.log()
,但知道它会在旧IE版本中抛出脚本错误,从而停止脚本)奇怪的是,这解决了问题。但仍然无法理解另一个提交Fire的位置。您可以开始查看现有代码旁边的内容。在您提供的代码上方,放置一个
警报('Test')
。如果警报触发两次,则该代码将触发两次。然后倒转,直到它不再发射两次。可能是包含提交钩子的函数被调用了两次,甚至jquery初始化也被调用了两次。有很多可能
<form name="dealForm" id="dealForm" action="<?php echo base_url(); ?>deals/update_deal/" method="POST" enctype="multipart/form-data">
$("form#dealForm").unbind('submit').submit( ...