Javascript 以编程方式调用质询grecaptcha.getResponse()在页面刷新时始终为空
我在jsp页面中呈现GoogleReCAPTCHA小部件,并在提交表单时以编程方式调用java脚本中的挑战Javascript 以编程方式调用质询grecaptcha.getResponse()在页面刷新时始终为空,javascript,jquery,html,recaptcha,invisible-recaptcha,Javascript,Jquery,Html,Recaptcha,Invisible Recaptcha,我在jsp页面中呈现GoogleReCAPTCHA小部件,并在提交表单时以编程方式调用java脚本中的挑战 <script type="text/javascript" id="recaptcha-response"> var siteKey = $('#recaptchasitekey').first().text(); var onloadCallback = function() { gr
<script type="text/javascript" id="recaptcha-response">
var siteKey = $('#recaptchasitekey').first().text();
var onloadCallback = function() {
grecaptcha.render('recaptcha_element', {
'sitekey' : siteKey,
'callback' : correctCaptcha,
'data-bind' : "qoActionTemplate"
},true);
};
var correctCaptcha = function(response) {
return response;
};
</script>
<div class="g-recaptcha" id="recaptcha_element" data-size="invisible" ></div>
<script src="http://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
<script type="text/template" id="recaptchaUrl">
我的
grecaptcha.getResponse()
在我第一次提交表单时总是为空,然后在我第二次提交表单时,我得到了一个响应 我不是100%确定,但我认为这是因为您直接在grecaptcha.execute()
之后以同步方式调用grecaptcha.getResponse()
,这不是使用不可见的reCaptcha的预期方式。grecaptcha.execute()
需要时间才能工作(我假设是这样),并且设计为异步返回到数据回调
方法。完成后,您可以随时(在调用grecaptcha.reset()
之前)使用grecaptcha.getResponse()
)获取响应令牌。我认为这就是grecaptcha.getResponse()
背后的想法。我假设它第二次起作用,因为它有时间处理不可见的reCaptcha。我认为grecaptcha.getResponse()
更适合于常规的reCaptcha,而不是不可见的。因为用户在提交表单时“完成”了常规的reCaptcha,而用户在提交表单时“完成”了不可见的reCaptcha,因此需要回调以让我们知道它已经完成。您解决过这个问题吗?
executeRecaptcha : function() {
grecaptcha.execute();
captcha.token = grecaptcha.getResponse();
if (captcha.token == null || captcha.token == '') {
grecaptcha.reset();
grecaptcha.execute();
}
return captcha.token;
},
validateRecaptcha : function(response,checkToken) {
captcha.executeRecaptcha();
if (captcha.token) {
var captchaUrl = $('#recaptchaUrl').first().text();
captcha.userSIDVerify = $('#captcha_token').val();
$.ajax({
type : 'POST',
url : captchaUrl,
data : {
response : captcha.token
},
success : captcha.checkToken,
error : function() {
alert("failed")
return;
}
});
}
}