3

我的 Rails 应用程序中有一个 Ajax 表单,其中包含 Ambethia Recaptcha gem 中的助手提供的 Recaptcha 标记:

recaptcha_tags :ajax => true

提交时,表单会触发一个创建操作,该操作以包含以下内容的 create.js.erb 进行响应:

$('#message-form').replaceWith("<%= escape_javascript(render('message')) %>");

“消息”部分包含最初呈现的相同表单标记,包括 recaptcha_tags,但如果此时验证中出现错误,也可能会显示。

在 Firefox 中,表单会重新呈现并显示刷新的验证码。但由于某种原因,在 Webkit 浏览器(Safari 和 Chrome)中,'dynamic_recaptcha' Recaptcha 元素被清空,好像 Recaptcha.create(public_key, element_id) 永远不会被调用。

在 Safari 开发者控制台中,我可以调用 Recaptcha.create(public_key, element_id) 并重新生成验证码。

谁能告诉我这里发生了什么?谢谢。

4

4 回答 4

4

我遇到了同样的问题,无法让它与 webkit 浏览器中的 recaptcha_tags 一起工作。

最后我遵循官方指南并这样写(在HAML中)....


  1. 在布局头标签中:

    = javascript_include_tag "http://api.recaptcha.net/js/recaptcha_ajax.js"
    
  2. 在通过 ajax 呈现的部分中:

    #dynamic_recaptcha
    :javascript
      Recaptcha.create('YOURPLUBLICKEY', document.getElementById('dynamic_recaptcha') , '')
    

http://code.google.com/apis/recaptcha/docs/display.html

于 2010-07-28T03:04:05.010 回答
1

如果有人遇到这个问题,ajax: true 对我有用。我正在使用 rails 3.2.13 和 recaptcha 0.3.5

=recaptcha_tags(display: {theme: 'clean'}, ajax: true)
于 2013-05-31T03:49:14.897 回答
0

我通过以下方法解决它:

将运行时不会由 ajax 加载的脚本放在 head 中:

<script type="text/javascript" src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>

可选主题:

<script type="text/javascript">var RecaptchaOptions = {"theme":"clean"};</script>

然后在true使用evalScripts选项调用 Ajax.Updater :

new Ajax.Updater('example_div', '/example', { parameters: {text: $F('example_text')}, evalScripts: 'true'});
于 2010-11-13T09:53:17.367 回答
0

在 HTML 文件中。

recaptcha_tags(ajax:真)

在 AJAX 请求中

$.ajax({
  url: "/users/sign_in",
  type: "POST",
  data: { 
 
  email_id: user_email_id,
  password: pwd,
  type: login_type,
  browser_det: browser_details,
  login_type: "firebase",
  "g-recaptcha-response": grecaptcha.getResponse()
  }
于 2020-05-25T11:55:30.200 回答