Javascript 如何提交此表单而不陷入无限循环?

Javascript 如何提交此表单而不陷入无限循环?,javascript,jquery,html,Javascript,Jquery,Html,我什么都试过了。我发现了其他问题,但没有答案可以解决我的问题: $(document).on('submit', 'form#formNuevoContacto', function(event) { var $form = $(this); var $accionActual = $form.find('#action'); $form.find('#action').val('validate'); $.post($form.attr("action"),

我什么都试过了。我发现了其他问题,但没有答案可以解决我的问题:

$(document).on('submit', 'form#formNuevoContacto', function(event) {
    var $form = $(this);
    var $accionActual = $form.find('#action');
    $form.find('#action').val('validate');

    $.post($form.attr("action"), $form.serialize(), function(response) {
        if (response.resultValidation == "true") {
            $form.submit(); // ==> INFINITE LOOP! 
        } else {
            alert('Form is not valid!');
        }
    });

    event.preventDefault();
});

我尝试了:
$form.unbind().submit()
,但没有成功

您可以使用切换来选择性地预处理提交,或者让浏览器完成其工作;在下面的编辑窗口中,在发出第二次提交之前,我在表单对象中放置了一个名为“isPreProcessing”的变量。如您所见,代码所做的第一件事是检查此值是否存在,如果存在,则将提交委托给浏览器

$(document).on('submit', 'form#formNuevoContacto', function(event) {
  if(this.isPreProcessing) {
    //allow for actual submit to run
    this.isPreProcessing = false;
    return;
  }
  var $form = $(this);
  var $accionActual = $form.find('#action');
  $form.find('#action').val('validate');

  $.post($form.attr("action"), $form.serialize(), function(response) {
    if (response.resultValidation == "true") {
        //prevent the loop
        this.isPreProcessing = true;
        $form.submit();  
    } else {
        alert('Form is not valid!');
    }
  });

  event.preventDefault();
});

您应该只执行一个ajax调用,如果错误没有得到验证,就处理它。如果服务器验证了它,那么服务器应该存储它。正如您现在所拥有的那样,它是一个混乱的代码,也是对ajax调用的浪费/时间的浪费。您发布了两次完全相同的数据

$.ajax({
    type: {most like put 'POST' here},
    url: {action url},
    data: {your form},
    success: success_function(),
    error: error_function()
});

提交表格之前检查表格是否有效有什么意义?为什么不只使用一个AJAX请求并在有错误的情况下处理错误?为什么在post请求的成功回调中执行
$form.submit()
?从按钮提交是什么意思?类似于$('input[type=submit])。在('click',…..???成功在哪里???成功在响应中。resultValidation==“true”,但验证后不会发生任何事件。。