Ambethia Recaptcha не может перерисоваться после отправки формы Ajax в браузерах Webkit - PullRequest
2 голосов
/ 26 июля 2010

В моем приложении Rails есть форма Ajax, содержащая разметку Recaptcha, предоставленную помощником в геме Ambapia Recaptcha:

recaptcha_tags :ajax => true

При отправке форма выполняет действие create, которое отвечаетcreate.js.erb, который содержит следующее:

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

Часть 'message' содержит ту же разметку формы, которая была первоначально отображена, включая recaptcha_tags, но может также отображаться, если при проверке были ошибки вэта точка.

В Firefox форма перерисовывается и отображает обновленную капчу.Но по какой-то причине в браузерах Webkit (Safari и Chrome) элемент Recaptcha 'dynamic_recaptcha' очищается, как будто Recaptcha.create (public_key, element_id) никогда не вызывается.

В консоли разработчика Safari яЯ могу вызвать Recaptcha.create (public_key, element_id) и восстановить Captcha.

Может кто-нибудь сказать мне, что здесь происходит?Спасибо.

Ответы [ 3 ]

4 голосов
/ 28 июля 2010

У меня была такая же проблема, и я не мог заставить ее работать с recaptcha_tags в браузерах webkit.

наконец-то я следовал официальному руководству и написал его вот так (в 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

1 голос
/ 31 мая 2013

если у кого-то возникла эта проблема, ajax: true помог мне. Я использую рельсы 3.2.13 и recaptcha 0.3.5

=recaptcha_tags(display: {theme: 'clean'}, ajax: true)
0 голосов
/ 13 ноября 2010

Я решаю это следующим способом:

помещая в голову сценарии, которые не загружаются ajax во время выполнения:

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

Опционально тема:

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

Затем вызывается Ajax.Updater с параметром evalScripts в true :

new Ajax.Updater('example_div', '/example', { parameters: {text: $F('example_text')}, evalScripts: 'true'});
...