2016-03-30 17 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

フォーム提出前にフォームが動作しているかどうかを確認するためにフォーム提出を行うのはどうですか? 1つのAJAXリクエストを使用してエラーが発生した場合は、それを処理するのはなぜでしょうか? –

+1

投稿リクエストの成功コールバックの中でなぜ '$ form.submit()'をやっていますか? – user3613129

+0

ボタンから送信するのはどういう意味ですか? $( 'input [type = submit])のように。on(' click '、.... .... ????????? –

答えて

0

トグルを使用して、送信を選択的に前処理したり、ブラウザがそのジョブを実行できるようにすることができます。以下の編集では、2番目のサブミットを発行する直前に、 "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

ただ1つのajax呼び出しを行い、検証されない場合はエラーを処理する必要があります。サーバーがそれを検証する場合、サーバーはそれを保管する必要があります。今のようにコードが乱雑ですし、時間の無駄です。全く同じデータを2回転記しています

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