问题
I load my contact form into my page with JQuery/AJAX.
The contact form contains the reCaptcha scripts.
Unfortunately, JQuery removes the script tags before inserting them into my page. These script tags are needed because they output the captcha. now my loaded form has no captcha.
回答1:
The link has all you need: http://code.google.com/apis/recaptcha/docs/display.html
You can't add the script in ajax. You should add the following line before :
<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>
Then, you can dynamically create a recaptcha form in your js code by using adding the following code:
Recaptcha.create("your_public_key",
"element_id",
{
theme: "red",
callback: Recaptcha.focus_response_field
}
);
回答2:
@benck, great answer! But it's become a bit outdated. The current script URL is:
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js"></script>
And the code should be like below:
grecaptcha.render('element_id', {
sitekey: recaptchaSiteKey,
callback: function(response) {
console.log(response);
}
});
回答3:
My approach is a bit different:
<script src='https://www.google.com/recaptcha/api.js?render=explicit' async defer></script>
<form>
<input name="whatEver" type="text">
<div id="captcha"></div>
<button>submit</button>
</form>
<script>
var captchaWidgetId = grecaptcha.render( 'captcha', {
'sitekey' : 'your_site_key'
'theme' : 'light'
});
$(document).ready(function(){
$('form').on('click','button', function(e){
var formDatas = $(this).closest('form').serialize()+'&response='+grecaptcha.getResponse(captcha);
$.post('post.php', formDatas, function(data){
//successful
});
});
});
</script>
来源:https://stackoverflow.com/questions/7261436/how-can-i-load-a-recaptcha-form-using-jquery-ajax-while-leaving-the-recaptcha-sc