2012-01-26 78 views
1

我用ajax檢查兩個值。如果兩者都是正確的,那麼我想提交一個提交(回傳)。 但後回傳不起作用。提交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(); 
} 

所以使用這樣使用這裏

if (correctCaptcha == true && correctWebcode == true) { 
    return true; 
} 
else {return false;} 
+0

+1。這將解決它,但它更好(如果可能)做到這一切在一個AJAX請求,然後使用異步: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異步工作,用自己的方式將不會提交表單,提交表單的回調函數。