Jquery 如何正确处理submit()中的ajax响应?

Jquery 如何正确处理submit()中的ajax响应?,jquery,ajax,forms,validation,submit,Jquery,Ajax,Forms,Validation,Submit,如何执行ajax调用并在submit()-codeblock中接收响应?(以适当的方式) 如果您有一个带有提交事件的表单,您可以在验证时执行以下操作 /* contact page */ $(".contactform").submit(function(e) { var companyfield = $(this).find(".companyfield").val(); if (parseInt(companyfield) === 0 || !companyfield) {

如何执行ajax调用并在submit()-codeblock中接收响应?(以适当的方式)

如果您有一个带有提交事件的表单,您可以在验证时执行以下操作

/* contact page */
$(".contactform").submit(function(e) {

    var companyfield = $(this).find(".companyfield").val();
    if (parseInt(companyfield) === 0 || !companyfield) {     
        return false;
    }

    return true; //Do submit form

}
现在我必须在验证(recaptcha)中包含来自服务器的响应(ajax调用),但由于ajax调用是异步执行的,所以即使来自服务器的响应不是预期的,表单也会提交,因为函数在ajax调用完成之前返回true

我对ajax调用或响应没有问题,但我不确定如何在不使用async:false的情况下实现返回true、false

我基本上想要这样的东西:

/* contact page */
$(".contactform").submit(function(e) {

    var companyfield = $(this).find(".companyfield").val();
    if (parseInt(companyfield) === 0 || !companyfield) {     
        return false;
    }

   var recaptchafield_is_valid = {response from server (ajax-call)}
   if (recaptchafield_is_valid  === false) {
       return false;
   }

    return true; //Do submit form

}
我也尝试了
$.when()
,但是表单也被提交了,因为没有设置true或false,表单被正常提交


我还尝试过使用e.preventDefault()和$(“.contactform”).submit(),但成功后使用
$(“.contactform”).submit(函数(e){
陷入递归循环。

处理此问题的方法是在提交事件中始终返回false,然后在captcha ajax调用的成功事件中,绕过提交事件处理程序,以编程方式提交表单

$(".contactform").submit(function(e) {
    var form = this;

    var companyfield = $(this).find(".companyfield").val();
    if (parseInt(companyfield) === 0 || !companyfield) {     
        return false;
    }

    // do the ajax
    $.ajax({
        url : '...',
        success : function(){
            // if the captcha is good, submit the form
            form.submit();
        }
    });

    return false;
}

注意:
form.submit()
正在调用DOM元素的submit方法,而不是jQuery submit处理程序。

如果要使用ajax,那么为什么要提交表单?@Jai-表单已提交到另一个域,该域处理表单中的值。因此,我需要通过ajax重新获取表单。
$(".contactform").submit(function(e) {
    var form = this;

    var companyfield = $(this).find(".companyfield").val();
    if (parseInt(companyfield) === 0 || !companyfield) {     
        return false;
    }

    // do the ajax
    $.ajax({
        url : '...',
        success : function(){
            // if the captcha is good, submit the form
            form.submit();
        }
    });

    return false;
}