尝试获取网站reCAPTCHA令牌报错,寻求调试解决方案
问题分析与调试方案
首先看你提供的站点代码,存在HTML字符串拼接的语法错误,这是导致表单无变化的核心原因:
在构造隐藏input的代码中,闭合value属性的引号错误使用了">,这会生成不合法的HTML标签(比如value="xxx">),浏览器无法正确解析这些字段,自然提交时没有预期效果。
修复后的代码
$('#main-content').submit(function (event) { var sk = "6Le7HZQeAAAAANyVJZBpFKiWwDstptVGJ2aGbyMC"; event.preventDefault(); grecaptcha.ready(function () { grecaptcha.execute(sk, {action: "vote"}).then(function (token) { // 修正引号闭合逻辑,生成合法的hidden input $("#main-content").prepend('<input type="hidden" name="sitekey" value="' + sk + '">'); $("#main-content").prepend('<input type="hidden" name="action" value="vote">'); $("#main-content").prepend('<input type="hidden" name="token" value="' + token + '">'); $("#main-content").unbind('submit').submit(); }); }); });
调试步骤
- 查看控制台报错:打开浏览器F12的「Console」标签,直接定位语法错误、变量未定义(比如
grecaptcha是否加载)等问题。 - 验证reCAPTCHA状态:在控制台输入
grecaptcha,如果返回undefined,说明reCAPTCHA的官方脚本还没加载完成,或者站点未正确引入。 - 检查事件绑定:执行
$._data($('#main-content')[0], 'events')(jQuery环境),查看submit事件是否成功绑定到表单上。 - 分步执行代码:把脚本拆成片段在控制台逐行运行,比如先执行
grecaptcha.execute(sk, {action:"vote"}),看能否正常获取token,定位问题出在reCAPTCHA调用还是DOM操作环节。 - 检查生成的DOM:执行完
prepend后,切换到F12的「Elements」标签,查看#main-content下是否新增了正确格式的隐藏input标签。
内容的提问来源于stack exchange,提问作者Tejas Lamba
相关产品推荐
相关产品推荐

