2012-01-26 77 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异步工作,用自己的方式将不会提交表单,提交表单的回调函数。