【问题标题】:Ajax post submitting form multiple-timesAjax 多次提交表单
【发布时间】:2017-12-16 14:26:06
【问题描述】:

我正在将此代码用于 Ajax 发送的数据。我正在使用 Summernote 编辑器。我的问题是,当我通过遗漏任何字段提交时,我的 from 显示“必需的警报”,然后当我填写所有字段并按下提交按钮时,表单会两次发送 Ajax 请求。直到每次我错过必填字段时都会发生这种情况。

  <script type="text/javascript">
    jQuery(document).ready(function (e) {
        jQuery('#btnSubmit').click(function(){ //btnSubmit is submit button id

            jQuery("#my_form").submit(function(event){
                event.preventDefault(); //prevent default action
                var post_url = jQuery(this).attr("action"); //get form action url
                var request_method = jQuery(this).attr("method"); //get form GET/POST method
                var form_data = new FormData(this); //Creates new FormData object
                jQuery.ajax({
                     url: "/demo/wp-admin/admin-ajax.php?action=theme_submit",  

                    type: request_method,
                    data : form_data,
                    contentType: false,
                    cache: false,
                    processData:false,
                    success:function(data){  
                    alert ('Data Successfully Inserted');
                    //location.reload();
                    //top.location.href="admin.php?page=data_list";
                    },

                })

            });
        })
    }); 
    </script>

【问题讨论】:

  • 尝试为按钮添加event.preventDefault()
  • 你不需要jQuery('#btnSubmit').click(function(){jQuery("#my_form").submit(function(event){如果你有的话,它会提交两次。
  • 删除你的句子:jQuery('#btnSubmit').click(function(){。如果您的表单按钮具有type='submit',则您在#myform 中的提交会单击
  • 如果我第一次填写所有字段,然后提交一次。我使用这个jQuery('#btnSubmit').click(function(){ 因为我使用的是summernote 编辑器。

标签: javascript jquery ajax


【解决方案1】:

您可以从点击中提取提交。编写一个提交表单的函数,并在单击#btnSubmit 时调用它。下面是帮助你的代码:

jQuery('#btnSubmit').on('click', function(event) {
  event.preventDefault(); //prevent default action
  submitForm();
})

function submitForm() {
  var post_url = jQuery("#my_form").attr("action"); //get form action url
  var request_method = jQuery("#my_form").attr("method"); //get form GET/POST method
  var form = $('form').get(0);
  var form_data = new FormData(form) //Creates new FormData object
  jQuery.ajax({
    url: "/demo/wp-admin/admin-ajax.php?action=theme_submit",

    type: request_method,
    data: form_data,
    contentType: false,
    cache: false,
    processData: false,
    success: function(data) {
      alert('Data Successfully Inserted');
      //location.reload();
      //top.location.href="admin.php?page=data_list";
    },

  })

}

【讨论】:

  • 错误显示:TypeError: Argument 1 of FormData.constructor is not an object. var form_data = new FormData("#my_form"); //Creates new FormData object
  • 我相信,我们需要将new FormData("#my_form") 更改为new FormData($("#my_form"))
  • 仍然显示TypeError: Argument 1 of FormData.constructor does not implement interface HTMLFormElement. var form_data = new FormData($("#my_form")); //Creates new FormData object
  • 似乎 FormData 期待 HTML 对象。在这种情况下,应该是var form = $('form').get(0);var form_data = new FormData(form)
  • 现已提交表单但未显示任何必需的提醒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 2011-06-17
  • 2015-04-04
  • 1970-01-01
相关资源
最近更新 更多