【发布时间】:2014-10-25 02:28:50
【问题描述】:
我使用欧芹实现了一个多步骤表单,我需要验证一个recaptcha。 第一个问题是recaptcha是由函数recaptcha_get_html($publickey)生成的,所以我不能在输入元素中手动添加属性。尽管如此,我在 window.onload() 上使用 .attr() 解决了如下问题:
window.onload = function() {
$("#recaptcha_response_field").attr('data-parsley-group','block1');
$("#recaptcha_response_field").attr('data-parsley-required','true');
$("#recaptcha_response_field").attr('data-parsley-remote-message','Wrong Captcha');
$("#recaptcha_response_field").attr('data-parsley-remote','lib/validateRecaptcha.php');
};
为了完成验证,我需要将两个字段传递给 php 文件:recaptchaChallengeField 和 recaptchaResponseField。
正如我所说,它是一个多步骤表单...所以为了验证表单,我将此逻辑附加到“下一步”按钮,并添加了 data-parsley-remote-options,如下所示:
$('.next').on('click', function () {
var current = $(this).data('currentBlock'),
next = $(this).data('nextBlock');
$("#recaptcha_response_field").attr('data-parsley-remote-options','{"type": "POST", "dataType": "jsonp", "data": {"recaptchaChallengeField": "'+$("#recaptcha_challenge_field").val()+'", "recaptchaResponseField": "'+$("#recaptcha_response_field").val()+'"}}');
// only validate going forward. If current group is invalid, do not go further
// .parsley().validate() returns validation result AND show errors
if (next > current)
if (false === $('#signup-form').parsley().validate('block' + current))
return;
// validation was ok. We can go on next step.
$('.block' + current)
.removeClass('show')
.addClass('hidden');
$('.block' + next)
.removeClass('hidden')
.addClass('show');
});
如您所见,recaptchaResponseField 是动态的……每次用户按下“下一步”按钮时,我都会捕捉到该值。
这是我的 php 代码:
require_once('recaptcha-php-1.11/recaptchalib.php');
$privatekey = "private_key";
$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptchaChallengeField"], $_POST["recaptchaResponseField"]);
if (!$resp->is_valid)
echo json_encode("404");
else
echo json_encode("200");
问题是它没有做任何事情......在recaptcha 输入中输入内容时,我没有收到任何错误消息。 可能是什么问题? 我已经尝试过使用 parsley.remote.js (.addAsyncValidator) 但也没有任何反应...... 我需要一些帮助。谢谢
【问题讨论】:
-
没有人可以帮助我吗? =/
-
您在
data-parsley-remote-options属性中使用"dataType": "jsonp"。我假设请求是针对同一个域的,所以您应该将其更改为json。此外,您还需要提供一些额外的详细信息:请求是否成功发出(您在控制台中看到了吗)?如果你var_dump($_POST)它包含你除了的值吗?
标签: javascript php jquery validation parsley.js