如何在不进入无限循环的情况下提交此表单?

时间:2016-03-30 18:58:09

标签: javascript jquery html5

我已经尝试了一切。我发现其他问题,但没有答案解决我的问题:

$(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()但是没有用。

2 个答案:

答案 0 :(得分:0)

您可以使用切换选择性地预处理提交或以其他方式让浏览器完成其工作;在下面的编辑中,在发出第二个提交之前,我将一个变量放在名为" 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();
});

答案 1 :(得分:0)

你应该只做一个ajax调用,如果它没有验证就处理错误。如果服务器验证它,服务器应该存储它。你现在拥有它是乱码,也浪费了ajax调用/浪费时间。您已经两次发布完全相同的数据

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