2012-01-26 12 views
1

私はajaxで2つの値をチェックします。両方が正しい場合は、提出(ポストバック)したいと思います。 しかし、ポストバックは機能しません。jquery-ajax関数の後に送信

$('form').submit(function() { 

      var correctCaptcha = false; 
      var correctWebcode = false; 

     $.ajax({ 
      url: '/Competition/CheckForm', 
      type: "POST", 
      data: $(this).serialize(), 
      success: function (data) { 
       if (data == true) { 
        $('#recaptcha_response_field').removeClass("captchaError"); 
        correctCaptcha = true; 
       } 
       else { 
        Recaptcha.reload(); 
        $('#recaptcha_response_field').addClass("captchaError"); 
       } 
      } 
     }); 

     $.ajax({ 
      // like the code above (for webcode) 
     }); 

     if (correctCaptcha == true && correctWebcode == true) { 
      document.forms['form'].submit(); 
     } 
     else { return false; } 
    }); 
+0

どの時点で失敗しますか? 'correctCaptcha'と' correctWebcode'が両方とも 'true'であることを確認できますか? – xbonez

+0

はいそれは今働いています...それは私が逃した非同期:偽でした:) – lifeofbenschi

答えて

3

使用Async:false

$.ajax({ 
     url: '/Competition/CheckForm', 
     type: "POST", 
     async:false, 
     data: $(this).serialize(), 
     success: function (data) { 
      if (data == true) { 
       $('#recaptcha_response_field').removeClass("captchaError"); 
       correctCaptcha = true; 
      } 
      else { 
       Recaptcha.reload(); 
       $('#recaptcha_response_field').addClass("captchaError"); 
      } 
     } 
    }); 

これは、無限ループが発生します:

if (correctCaptcha == true && correctWebcode == true) { 
    document.forms['form'].submit(); 
} 

だからここ

をこのような使用を使用する。ここ

コードです10

+0

+1。それはそれを解決するだろうが、(可能であれば)1つのAJAX要求でそれを行うのが良いです、それからasyncを使用してください:false – gdoron

+0

ありがとうございます:) – lifeofbenschi

+2

'async'を' false'に設定しないことをお勧めしますあなたが応答を得るまでブラウザを完全に停止させるからです。接続が遅い場合は、ブラウザをハングアップすることもあります。問題を解決する他の方法がある場合、これはアドバイス可能なものではありません。 – ShankarSangoli

2

ajaxは本質的に非同期なので、ajax呼び出し時にこれらの変数をすぐに設定することはできません。 asyncをfalseに設定するか、フォームを成功ハンドラ内に送信します。これを試して。デフォルトでは

$('form').submit(function() { 

      $.ajax({ 
       url: '/Competition/CheckForm', 
       type: "POST", 
       data: $(this).serialize(), 
       success: function (data) { 
        if (data == true) { 
         $('#recaptcha_response_field').removeClass("captchaError"); 
         $('form') 
         .unbind('submit')//we dont need any handler to execute now 
         .submit(); 
        } 
        else { 
         Recaptcha.reload(); 
         $('#recaptcha_response_field').addClass("captchaError"); 
        } 
       } 
      }); 


      $.ajax({ 
       // like the code above 
      }); 


      return false;//To prevent the form from being submitted. 
     }); 
0

$.ajax作品非同期で、フォームを送信しませんあなたの方法は、あなたがコールバック関数でフォームを提出してください。

関連する問題