2016-03-30 7 views
-1

Я пробовал все. Я считаю, другие вопросы, но никакого ответа не решает мою проблему:Как отправить эту форму без бесконечного цикла?

$(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

Что нужно сделать для представления формы, чтобы проверить, работает ли форма перед подачей заявки? Почему бы просто не использовать один запрос AJAX и не иметь дело с ошибкой, если он есть? –

+1

Почему вы делаете '$ form.submit()' внутри обратного вызова успеха после запроса? – user3613129

+0

Что вы хотите отправить с помощью кнопки? например $ ('input [type = submit]). on (' click ', .... ????????? –

ответ

0

Вы можете использовать переключатель, чтобы selectivelly предварительно обработал 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(); 
}); 
0

Вы должны просто выполнить один вызов ajax и обработать ошибку, если она не подтверждена. Если сервер проверяет его, сервер должен сохранить его. Это грязный код, как у вас есть сейчас, и это также пустая трата звания ajax/траты времени. Вы отправляете одни и те же данные дважды

$.ajax({ 
    type: {most like put 'POST' here}, 
    url: {action url}, 
    data: {your form}, 
    success: success_function(), 
    error: error_function() 
}); 
Смежные вопросы