当前位置: 首页 > 知识库问答 >
问题:

在不可见的reCaptcha回调中传递变量

胥承
2023-03-14

我正在为我们的CMS应用程序中的一个网站创建一个表单,该应用程序使用了谷歌新的隐形reCaptcha。

然而,我被困在如何使用reCaptcha的回调上?

在使用验证码之前,代码非常简单:

HTML

<form>
    Form input fields here...
    <button id="a23k4l234lj2l-submit-button"></button>
</form>

jQuery

$('#a23k4l234lj2l-submit-button').click(function (e) {
    e.preventDefault();
    var that = $(this);
    if(Abayo.validate(that)) {
        Abayo.submit(that);
    }
})

Abayo库具有验证特定表单并将数据发送到处理表单数据的脚本的函数。

现在,我想将reCaptcha添加到表单中。文件说明如下:

1创建一个div与data-size='不可见'。

<div class="g-recaptcha"
      data-sitekey="your_site_key"
      data-callback="onSubmit"
      data-size="invisible">
</div>

2打电话给grecaptcha。从javascript方法执行。

grecaptcha.execute();

这是可行的,但是captcha的回调函数只给我一个响应代码来检查验证用户响应:

html" target="_blank">用户的响应g-recaptcha-response将作为回调函数的输入。

响应只告诉我是否可以将请求发送到服务器。

我需要的是submit按钮的位置、DOM元素或按钮的任何类型的标识,以便从与按钮匹配的表单中检索数据?

使用以下代码,我无法从表单中检索数据并将其发送到服务器?

$('#a23k4l234lj2l-submit-button').click(function (e) {
    e.preventDefault();
    grecaptcha.execute();
})

var onSubmit = function(response) {
    // var that cannot be defined, I don't have a DOM element anywhere?
    var that = ????
    if(Abayo.validate(that)) {
        Abayo.submit(that);
    }
}

有没有办法在reCaptcha回调中获取DOM元素?

共有2个答案

居晗日
2023-03-14

你有没有尝试过像这样动态地设置onSubmit函数(保持你的div标记为data-call back="onSubmit"):

$('#a23k4l234lj2l-submit-button').click(function (e) {
    e.preventDefault();
    var that = $(this);
    if(Abayo.validate(that)) {
      window.onSubmit = function(){ // defining onSubmit function dynamically here
        Abayo.submit(that); // you can access `that` here
      };
      grecaptcha.execute();
    }
})

注意:我手边没有sitekey来验证此代码。因此,将此视为一种方法而不是使用代码示例。

唐高朗
2023-03-14

您可以以编程方式创建reaptcha。

首先创建您的验证码div。

<div id="myCaptcha" />

然后呈现验证码并使用令牌传递数据

var that = $(this);
grecaptcha.render('myCaptcha', { 
  sitekey: 'xxx', 
  callback: function(token) {
    Abayo.submit(token, that) 
  }
});

更多信息请点击这里https://developers.google.com/recaptcha/docs/invisible#js_api

 类似资料:
  • 我正在尝试在我的AngularJS web应用程序中实现不可见的reCAPTCHA。根据他们的文档,我应该在登录表单的提交按钮中添加一个名为“数据回调”的属性。但是,我使用ng click将http请求的函数附加到按钮。那么我应该在“数据回调”属性的值中输入什么呢?另外,我如何知道recaptcha结果是否成功,并获取g-recaptcha-response以使用http请求发送到服务器? htt

  • 我正在尝试实现新的不可见的reCaptcha,但它不起作用。 首先,事件困难我已经用“隐形”选项创建了一个新的键,在我的应用程序中更改了键,当我在控制台中查看时,我可以看到这个请求: 根据医生的说法是对的... 第二,我选择将验证码放在一个div中(根据文档这是可以的): 这是一个验证码解决方案,但不是不可见的解决方案,因为它仍然显示框。我知道我也必须使用execute函数,但由于我仍然看到框,我

  • 问题内容: 我有以下代码: 我要解决的问题是这个,我要在 里面 使用。我该怎么做呢? PS:内部的函数在Go中称为回调吗? 问题答案: 您也可以尝试返回一个函数:

  • 在文档中,它假定表单是普通表单,而不是Ajax。到底应该如何将不可见的reCaptcha集成到我的ajax表单中?例如: 特别是,我应该为“数据回调”处理程序指定什么?同样,在文档中,it data-callback提交了一个表单,但是是一个普通的表单,而我的表单是Ajax。我需要“数据回调”吗?我不应该在处理程序中调用recaptcha吗?怎么做? 有“render”、“getresponse”

  • 我正在建立一个PHP网站,我想把验证码放在登录表单上。我使用了Google新的隐形reCaptcha,但在实现它时遇到了麻烦(HTML部分,PHP正在工作)。 我现在得到的“普通”reCaptcha的代码如下(根据Google reCaptcha的说明,这是有效的): 当我注册时,确认邮件中发送了一些指示(大约花了24小时才得到确认)。也就是说: 隐形reCAPTCHA集成 > 请确保您的站点密钥

  • 问题内容: 与Firebase问题相比,这更像是JavaScript关闭问题。在以下代码中,Firebase回调无法识别父作用域中的变量myArr。 问题答案: 回调函数可以很好地识别/修改。问题是,当执行标记为“不工作”的标签时,回调尚未触发。 让我们稍微更改一下代码: 现在,可能会更容易了解发生了什么。 您注册一个侦听器,该侦听器将调用添加到Firebase中的每个帖子 这将导致对服务器的调用