ReCAPTCHA 找不到用户提供的函数:myCallBack

问题描述 投票:0回答:10

我正在尝试使用 ReCAPTCHA,但出现以下错误。

ReCAPTCHA 找不到用户提供的函数:myCallBack。

如何解决这个问题?

var verifyCallback3 = function(response) {
    if(response!=null){
        $("#rss").show();
    }
};

var myCallBack = function() {
    grecaptcha.render('html_element', {
        'sitekey' : '6sssfffffffffAAPfEI_RkbAlUuw5FA4p-kiGy5Nea',
        'callback' : verifyCallback3,
        'theme' : 'light',
        'type':'image'
    });
};
jquery recaptcha
10个回答
43
投票

确保您的回调函数是在全局范围内定义的。由于某种原因,在生产中我的函数不在这个命名空间中。

除了:

function myCallback() { ... }

确保直接将其分配到全局空间中:

window.myCallback = myCallback;

您应该能够测试这是否是您的问题,我在 Javascript 控制台中输入函数名称并查看它是否已定义。


13
投票

同样的事情也发生在我身上。我仔细检查了我的代码,一切都很好,但验证码未显示,并且在控制台中消息是“ReCAPTCHA 找不到用户提供的函数:myCallBack”,但最后我发现我的 JavaScript 代码was 在页面加载函数中。我刚刚从页面加载功能及其工作中将其推出。


12
投票

在您的 recaptcha div 中,确保不要在数据回调中使用括号。

像这样

data-callback="yourCallback"
,而不是
data-callback="yourCallback();"


12
投票

你必须放置你的脚本函数:

<script> function registerFormCheck()</script>

在谷歌脚本之前是这样的:

/* First */    <script> function registerFormCheck(){} </script>
/* Second */   <script src='https://www.google.com/recaptcha/api.js'></script>

这对我有用......


2
投票

参考 John Lehmann 的 answer,对于 React 用户,为了使你的回调函数可见,请将其设为全局。

您可以通过使用

useEffect()
componentDidMount()
生命周期方法来实现这一点。

例如:

useEffect(() => {
    window.verifyCaptcha = verifyCaptcha;
})

这样,当包含 reCAPTCHA 框的组件加载时,它也会使您的回调函数成为全局的。


1
投票

函数中的某处或 JavaScript 中的某处可能存在错误,导致函数无法注册,对我来说,这是缺少逗号。根据您所掌握的情况,我猜测它与“html_element”或未分配的 widgetID 有关。尝试:

var myCallBack = function() {
    var widgetID;
    widgetID = grecaptcha.render(document.getElementById('html_element'), {
        'sitekey' : '6sssfffffffffAAPfEI_RkbAlUuw5FA4p-kiGy5Nea',
        'callback' : verifyCallback3,
        'theme' : 'light',
        'type':'image'
    });
};

0
投票

对于我来说这个解决方案:

<script src="https://www.google.com/recaptcha/api.js?&render=explicit" async defer></script>

0
投票

Google 文档中的代码示例之一中,它们包含此脚本标记,但没有结束标记:

<script async src="https://www.google.com/recaptcha/api.js">

添加结束标签解决了我的问题:

<script async src="https://www.google.com/recaptcha/api.js"></script>

0
投票

有趣的事情:

更改此:

var verifyCallback3 = function(response) {
   if(response!=null){
       $("#rss").show();
   }
};

对此:

function verifyCallback3(response) {
   if(response!=null){
       $("#rss").show();
   }
};

为我成功了。


0
投票

我遇到了同样的问题,并通过停用缓存插件解决了这些问题。由于缓存插件,此问题经常出现在 WordPress 网站中。停用缓存插件并检查。

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.