Javascript 第二次提交时提交两次reCAPTCHA表格

Javascript 第二次提交时提交两次reCAPTCHA表格,javascript,c#,jquery,ajax,recaptcha,Javascript,C#,Jquery,Ajax,Recaptcha,我正在使用reCAPTCHA v2创建一个表单,并希望该表单能够在不重新加载页面的情况下再次提交。当我第一次提交表单时,它按预期工作。但是,当我在不重新加载页面的情况下再次提交表单时,我的CaptchaValidate函数将被调用两次,首先返回false,然后返回true。为什么会这样?任何帮助都会很好,谢谢 HTML 控制器 [HttpPost] public async Task<string> GetCaptchaData(string dataToken) { Htt

我正在使用reCAPTCHA v2创建一个表单,并希望该表单能够在不重新加载页面的情况下再次提交。当我第一次提交表单时,它按预期工作。但是,当我在不重新加载页面的情况下再次提交表单时,我的CaptchaValidate函数将被调用两次,首先返回false,然后返回true。为什么会这样?任何帮助都会很好,谢谢

HTML

控制器

[HttpPost]
public async Task<string> GetCaptchaData(string dataToken)
{
    HttpClient httpClient = new HttpClient();
    string secretKey = "mySecretKey";

    var res = httpClient.GetAsync("https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + dataToken).Result;

    if (res.StatusCode != HttpStatusCode.OK)
        return "false";

    string JSONres = res.Content.ReadAsStringAsync().Result;
    dynamic JSONdata = JObject.Parse(JSONres);

    if (JSONdata.success != "true")
        return "false";

    return "true";

}
[HttpPost]
公共异步任务GetCaptchaData(字符串dataToken)
{
HttpClient HttpClient=新HttpClient();
字符串secretKey=“mySecretKey”;
var res=httpClient.GetAsync(“https://www.google.com/recaptcha/api/siteverify?secret=“+secretKey+”&response=“+dataToken”)。结果;
if(res.StatusCode!=HttpStatusCode.OK)
返回“false”;
字符串JSONres=res.Content.ReadAsStringAsync().Result;
动态JSONdata=JObject.Parse(JSONres);
if(JSONdata.success!=“true”)
返回“false”;
返回“真”;
}

尝试使用
e.停止即时复制()
它会停止执行其余的事件处理程序

function onSubmit(response) {
        $('#form').submit(function (e) {
            e.preventDefault();
            e.stopImmediatePropagation(); // new line
            

                const formData = $(this).serializeArray();
                $.ajax({
                    url: '/Home/CaptchaValidate',
                    type: 'POST',
                    dataType: 'text',
                    data: { dataToken: response },
                    success: function (resultData) {
                        if (resultData == 'true') {
                            //do something
                        }
                        else {
                            $('.error-message').html('could not submit form');
                        }
                    },
                    error: function (err) {
                        console.log(err);
                    }
                })
            }).submit();
            grecaptcha.reset();
    }

您好,由于某些原因,在第二次提交时,它最初返回false,但应该返回true。所以我想知道为什么它返回false,以及如何防止它。如果页面在提交后刷新,那么它将再次正常工作,但在不刷新的情况下,其行为会有所不同。
[HttpPost]
public async Task<string> GetCaptchaData(string dataToken)
{
    HttpClient httpClient = new HttpClient();
    string secretKey = "mySecretKey";

    var res = httpClient.GetAsync("https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + dataToken).Result;

    if (res.StatusCode != HttpStatusCode.OK)
        return "false";

    string JSONres = res.Content.ReadAsStringAsync().Result;
    dynamic JSONdata = JObject.Parse(JSONres);

    if (JSONdata.success != "true")
        return "false";

    return "true";

}
function onSubmit(response) {
        $('#form').submit(function (e) {
            e.preventDefault();
            e.stopImmediatePropagation(); // new line
            

                const formData = $(this).serializeArray();
                $.ajax({
                    url: '/Home/CaptchaValidate',
                    type: 'POST',
                    dataType: 'text',
                    data: { dataToken: response },
                    success: function (resultData) {
                        if (resultData == 'true') {
                            //do something
                        }
                        else {
                            $('.error-message').html('could not submit form');
                        }
                    },
                    error: function (err) {
                        console.log(err);
                    }
                })
            }).submit();
            grecaptcha.reset();
    }