使用jQuery获取reCaptcha以使用Ajax

时间:2011-03-29 05:22:05

标签: jquery ajax security recaptcha

我有一个表单可以使用Ajax进行验证和发布,或者更具体地说,使用$.post()进行验证。

有一次,有一个reCaptcha。当我没有使用$.post()但以旧式方式(页面刷新)发布时,此表单工作正常,仅供参考。

转换表单需要我将所有$_POST更改为$_REQUEST。但是,这并没有解决reCaptcha问题,所以我保持完整。这是registerPost.php中的reCaptcha PHP代码:

  require_once('recaptchalib.php');
  $privatekey = "dropbeatsnotbombs";
  $resp = recaptcha_check_answer ($privatekey,
                            $_SERVER["REMOTE_ADDR"],
                            $_POST["recaptcha_challenge_field"],
                            $_POST["recaptcha_response_field"]);

 if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
echo "Error";
}
else {
   //post form
}

这是处理表单发布的jQuery:

$.post('php/registerPost.php', $('#registerPost').serialize(), function(data){
                if(data == "Error")
                {
                    $('#caErr').show();
                }
                else
                {
                    window.location.replace("//main page");
                }
            });
  

注意:reCaptcha 似乎返回false,因为当所有内容都正确填写时,表单将不会提交。

我想要做的是在输入错误时显示错误,如果输入错误则显示错误,全部异步。

任何帮助?

1 个答案:

答案 0 :(得分:2)

嗯。我需要阅读$ .post()的API文档,但我的第一个猜测是,由于表单没有真正提交,因此没有填充$ _POST数组,因此当您使用$_POST["recaptcha_challenge_field"]之类的值时,这只是一片空地。再次,我需要去验证,但那是我的预感。

修改

看起来我错了。我将你所拥有的API和我的旧脚本进行了比较,你所做的应该没问题。我看到的唯一区别是你将其作为数据传递:

$('#registerPost').serialize()

而我的剧本传递了这个:

$('#form').serializeArray()

可能就是那么简单......