django:recaptcha:firefox中的错误适用于IE& chrome:RecaptchaState错误

时间:2010-02-06 02:28:54

标签: django firefox recaptcha

我已将Recaptcha与dJango整合在一起。 dJango Snippet - Recaptcha

显示该页面的视图是 - 来自baseapp.recaptcha import captcha

def showHome(request):    
    if(request.user.is_authenticated()):    
        tempEmail = request.session.get('id')    
        return render_to_response('logreg/login-register.html',   {'emailFromForm':tempEmail}, context_instance=RequestContext(request));    
    else:    
        request.session.set_test_cookie()    
        form = RegistrationForm()    
        loginForm = LoginForm()    
        html_captcha = captcha.displayhtml(settings.RECAPTCHA_PUB_KEY)    
        print "Captcha HTML is : %s" % html_captcha    
        return render_to_response('logreg/login-register.html', {'form': form, 'loginForm':loginForm, 'html_captcha':html_captcha})    `

以下是html中的代码 -

<div id="register-dialog" title="Register yourself">    
  <p id="validateTips">All form fields are required.</p>    
  {% if error %}    
  {{ error }}    
  {% endif %}    
  <form name="registrationForm" action="registerUser/" method="post">    
      {{ form.as_p }}    
      {{ html_captcha }}    
  </form>    
</div>

它在IE&amp; Chrome,但firefox在recaptcha第451行显示异常。 以下是该行var $ST = RecaptchaState;

的代码

任何想法都表示赞赏!

注意:Firefox版本 - 3.6; IE - 8; Chrome - 4.0

1 个答案:

答案 0 :(得分:0)

以下是我如何解决它。

我认为我的验证码是在jqueryui对话框中显示的,也许这就是FF的问题。 (为什么?我不知道。) 因此,而不是静态地将文本放在django或写出来。 我使用ajax api并在对话框的open事件中插入了recaptcha。

以下是示例代码,以防有人遇到同样的问题。

代码与reCaptcha api site

上的代码几乎相似
$("#register-dialog").dialog({    
    buttons:{
    },    
    open: function() {
    Recaptcha.create("41x39....",
        "recaptcha_div", {
        theme: "red",
        callback: Recaptcha.focus_response_field
        });

并将表单标记更改为 -

<form name="registrationForm" action="registerUser/" method="post">    
    {{ form.as_p }}    
    <div id="recaptcha_div"></div>    
</form>

是的,包括ajax.js -

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