【发布时间】:2020-05-26 06:17:08
【问题描述】:
我陷入了困境,Javascript 世界很奇怪。
在继续提交表单之前,我需要使用 resolved 制作一个带有 reCAPTCHA v3 令牌的表单。由于某些事件绑定到submit 事件的形式,事件循环必须等到它被解决,否则它会失败:
- 如果出现错误(例如输入中的无效值),某些表单具有阻止提交的验证事件。
- 如果用户在页面加载时点击表单的速度过快(由于自动完成),并且仍未检索到令牌,则请求会返回错误。
虽然我试图做的是为submit 事件设置一个侦听器,该事件在令牌被解析之前阻止提交,然后再继续使用其他侦听器。
目前关于 reCAPTCHA 脚本的文档为零,我还没有找到一种可靠的方法来实际有效地解析令牌。 reCAPTCHA 脚本是异步的,所以没有办法等到令牌被解析:
// Let's retrieve the form by its id.
let form = document.getElementById('example_form');
let addToken = (form) => {
grecaptcha.execute('site_key', {
// some options
}).then(token => {
// Include the token as an input inside the form so it's sent.
});
};
form.addEventListener('submit', () => {
return addToken(form); // <-- This won't work, since it's async.
});
【问题讨论】:
标签: javascript asynchronous async-await dom-events recaptcha