Когда пользователи отправляют форму, в php проверяются поля.Если есть какая-то ошибка, php возвращает эхо-сообщение о том, что произошла ошибка (она не возвращает ERROR в ajax).Так что Аякс по-прежнему "успех".
Если я прокомментирую grecaptcha.reset();
в успехе ajax и когда пользователь отправит форму во второй раз, то $response != null && $response->success
вернет false
в php.
Как это исправить, чтобы не было grecaptcha.reset()
после успешной работы ajax и чтобы пользователю было достаточно пропустить капчу только один раз.
Вот reCAPTCHA вHTML-форма:
<div class="g-recaptcha" style="display:inline-block;" data-sitekey="6LdDlHIUAAAAAD3hgpRSSsNpS7SaRILGNTNiyak_"></div>
Вот jQuery:
jQuery('#some_form').submit(function(e){
e.preventDefault();
var FormData = jQuery(this).serialize();
jQuery('.buttonHolder').css('display', 'none');
jQuery('#spinner-1').css('display', 'block');
jQuery.ajax({
url : rml_obj.ajax_url,
type : 'post',
dataType : 'json',
data : {
action : 'some_form',
security : rml_obj.check_nonce,
data1 : FormData
},
success : function( response ) {
PUM.open(7939);
//alert(checkbox_chk);
jQuery('.pum-content').html(response.message1);
jQuery('.copy-url').html(response.message2);
jQuery('.buttonHolder').css('display', 'block');
jQuery('#spinner-1').css('display', 'none');
//grecaptcha.reset();
},
error: function(xhr, ajaxOptions, thrownError){
alert(xhr.status);
},
});
});
А вот код php для тестирования reCAPTCHA:
require_once "recaptchalib.php";
$secret = "6LdDlHIUAAAAALFlTOx-9T63cODtjs7eno******";
$response = null;
$reCaptcha = new ReCaptcha($secret);
$data = $_POST[ 'data1' ];
parse_str($data, $output);
$var1 = $output['var1'];
$var2= $output['var2'];
if ($output["g-recaptcha-response"]) {
$response = $reCaptcha->verifyResponse(
$_SERVER["REMOTE_ADDR"],
$output["g-recaptcha-response"]
);
}
if ($response != null && $response->success) {
//insert data into db ...
header("Content-type: application/json; charset=utf-8");
echo json_encode(
array("message1" => 'message1',
"message2" => 'message2')
)
} else {
header("Content-type: application/json; charset=utf-8");
echo json_encode(
array("message1" => 'error reCAPTCHA')
}