我正在尝试使用 AJAX 实现 ReCaptcha 来验证它,以便在 ReCaptcha 失败时可以阻止页面提交。
这是我的 JavaScript:
function verify_recaptcha(){
jQuery.post(
'verify_recaptcha.php',
{
recaptcha_challenge_field: jQuery('#recaptcha_challenge_field').val(),
recaptcha_response_field: jQuery('#recaptcha_response_field').val()
},
function(data){
if(data == "true"){
alert("ReCaptcha Verified");
}
else{
alert(data);
}
}
);
}
以及verify_recaptcha.php的内容
<?php
require_once('recaptchalib.php');
$privatekey = "-- my private key --";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
echo "false";
} else {
echo "true";
}
?>
问题是,如果 recaptcha 验证,我的测试警报将显示“true”(如果没有验证,则显示 false),我认为这是不可能的。它应该在 if 语句中评估 data == “true” 并显示“ReCaptcha Verified”。
我搜索的关于该主题的大多数内容的问题是人们试图从 AJAX 调用中返回一个值,我知道我不能这样做,也没有在这里这样做。
我错过了什么?
最佳答案
稍微重新构建了您的代码。尝试一下,
PHP:
...
...
$json = array();
if (!$resp->is_valid)
$json['result'] = true;
else
$json['result'] = false;
header('Content-Type: application/json; charset=utf-8');
echo json_encode($json);
JS:
...
...
jQuery.post(
'verify_recaptcha.php',
{
recaptcha_challenge_field: jQuery('#recaptcha_challenge_field').val(),
recaptcha_response_field: jQuery('#recaptcha_response_field').val()
})
.done(function(response){
console.log(response);
if(response.result == true)
{
// Entered captcha is correct
}
else
{
// Entered captcha is incorrect
}
});
说明:
1) 始终返回 bool 值true/false
,而不是字符串形式。
2) 使用.done()
。与您的代码不会有太大区别,但 .done()
使您的 ajax 调用代码更加清晰。
3) 始终打开您的控制台
并尝试打印对象并查看输出是否符合您的预期。
关于javascript - 无法评估 AJAX 调用的 true/false 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24189363/