当用户提交表单时,将在php字段中进行验证。如果有错误,则php返回回显消息,表明存在错误(它不会将错误返回给ajax)。因此,ajax仍然是“成功”的。
如果我在ajax成功中评论grecaptcha.reset();
,并且当用户第二次提交表单时,$response != null && $response->success
将以php返回false
。
如何解决此问题,以便在ajax成功之后不存在grecaptcha.reset()
,并且用户仅一次通过验证码就足够了。
以下是html格式的reCAPTCHA:
<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);
},
});
});
这是用于测试reCAPTCHA的php代码:
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')
}