无法在JQuery Ajax返回时刷新reCaptcha

时间:2012-04-03 23:31:28

标签: javascript ajax jquery recaptcha

我有一段时间试图让Ajax自动刷新JQuery AJAX回调。我有一个评论框,在reCaptcha验证后立即刷新消息,如果reCaptcha可以自动刷新,以防有人想在之后立即添加另一个评论,那将是很好的。这是我的返回功能:

 $.post(url, formData, function(data) {
        if (returnString.match(/^Error:/)) {
          $("#interactionResults").html(data).show().fadeOut(6000);
        }
        else if (postNumber == 0) {
          $('#newCommentDisplay').html(returnString).show();
          $.post("http://www.google.com/recaptcha/api", "Recaptcha:reload()");   
        }

当我使用时:

$.post("http://www.google.com/recaptcha/api", "Recaptcha:reload()"); 

我收到错误:

XMLHttpRequest cannot load http://www.google.com/recaptcha/api. Origin http://localhost:8888 is not allowed by Access-Control-Allow-Origin. 

足够公平,所以我试着改变这一行:

$('#recaptcha_reload_btn').trigger('click'); 

仍然没有发生任何事情。有谁知道发生了什么?

6 个答案:

答案 0 :(得分:6)

在我的HTML中我有:

<div class="g-recaptcha" id='recaptcha' data-sitekey="xxxxxxxxxx"></div>

我使用grecaptcha.reset();

例如:                         if(typeof $(&#39; #recaptcha&#39;)!=&#34; undefined&#34;){                             grecaptcha.reset();                         }

答案 1 :(得分:3)

使用

jQuery("#recaptcha_reload").click(); 

“#recaptcha_reload”,图像本身,是触发器。 #recaptcha_reload_btn不起作用,因为a-tag不是触发器。

答案 2 :(得分:2)

Recaptcha.reload();

(Recaptcha已经加载)

答案 3 :(得分:0)

如果你使用新的recaptcha 2.0,请使用: 代码背后:

ScriptManager.RegisterStartupScript(this, this.GetType(), "CaptchaReload", "$.getScript(\"https://www.google.com/recaptcha/api.js\", function () {});", true);

简单的javascript

<script>$.getScript(\"https://www.google.com/recaptcha/api.js\", function () {});</script>

答案 4 :(得分:-1)

您尚未将点击处理程序绑定到您的元素。来自jQuery文档:

  

.trigger(eventType [,extraParameters])

     

描述:执行附加到的所有处理程序和行为   给定事件类型的匹配元素。

如果在调用trigger之前没有为元素附加处理程序,则不会执行单击处理程序。

修改

当您编写$('#recaptcha_reload_btn').bind('click');时,您实际上设置了一个单击处理程序,但它不会执行任何操作。你必须告诉clickhandler该做什么:

$('#recaptcha_reload_btn').bind('click',function() {
    alert('you just clicked me');
};

如果您没有设置回调处理程序,则事件只是已注册但不会触发任何操作。将此与此问题Reload an iframe with jQuery的解决方案相结合,您应该按照自己的意愿进行重新计算:

$('#recaptcha_reload_btn').bind('click',function() {
    var iframe = document.getElementById('#recaptcha'); //use your own selector here!
    iframe.src = iframe.src;
};

答案 5 :(得分:-1)

$( "#recaptcha_reload_btn" ).click();