javascript - 无法评估 AJAX 调用的 true/false 返回

标签 javascript php jquery ajax

我正在尝试使用 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/

相关文章:

javascript - Codeigniter 表单验证检查输入值是否已更改

php - 如何修改服务器上的 less 文件?

PHP 和 FFMPEG - 执行智能视频转换

php - Javascript 或 Jquery 中两个日期之间的天数

javascript - 打开的网络套接字连接是否阻止了 ajax 请求?

javascript - 将表单提交到新窗口/标签

php - 当计数显示内部元素的数量时,数组中出现未定义的偏移错误

javascript - jquery 数据表页面上未显示列选择器

jquery - 如何使用AjaxPrefilter?

javascript - 是否可以动态刷新 HighCharts 钻取?