无法评估来自AJAX调用的真/假返回

时间:2014-06-12 16:24:21

标签: 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";
}
?>

问题是我的测试提醒正在显示&#34; true&#34;如果重新验证(如果它没有,则为假),我认为不应该这样。它应该评估数据==&#34; true&#34;在那个if语句和显示&#34; ReCaptcha Verified&#34;。

我搜索主题的大多数问题都是人们试图从AJAX调用中返回一个值,我知道我不能这样做而且不在这里。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

重新编写代码。尝试,

<强> 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)始终返回布尔 true/false ,而不是字符串形式 2)使用 .done() 。不会对您的代码产生太大影响,但 .done() 会使您的ajax呼叫代码更加清除
3)始终打开 console 并尝试打印对象并查看输出是否符合您的期望。