我在让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');
仍然没有任何反应。有人知道发生了什么吗?
在我的html中,我有:
<div class="g-recaptcha" id='recaptcha' data-sitekey="xxxxxxxxxx"></div>
我使用grecaptcha.reset();
示例:如果(typeof $('#recaptcha')!=“未定义”){grecaptcha.reset();}
使用
jQuery("#recaptcha_reload").click();
“#recaptcha_reload”,即图像本身,是触发器。 #recaptcha_reload_btn将不起作用,因为a标签不是触发器。
Recaptcha.reload();
(Recaptcha已加载)
如果您使用的是新的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>
您尚未将点击处理程序绑定到您的元素。从jQuery文档:
。trigger(eventType [,extraParameters])
说明:执行所有附加到给定事件类型的匹配元素。
如果在调用触发器之前尚未将处理程序附加到元素,则没有要执行的单击处理程序。
编辑:
[编写$('#recaptcha_reload_btn').bind('click');
时,您实际上设置了一个单击处理程序,但是没有执行任何操作。您必须告诉clickhandler怎么办:
$('#recaptcha_reload_btn').bind('click',function() {
alert('you just clicked me');
};
如果未设置回调处理程序,则只会注册该事件,但不会触发任何操作。将此与问题Reload an iframe with jQuery的解决方案结合起来,您应该使自己的Recaptcha可以执行您想要的操作:
$('#recaptcha_reload_btn').bind('click',function() {
var iframe = document.getElementById('#recaptcha'); //use your own selector here!
iframe.src = iframe.src;
};
$( "#recaptcha_reload_btn" ).click();