欧芹远程回收验证

时间:2014-08-31 20:29:58

标签: javascript php jquery validation parsley.js

我使用parsley实现了一个多步骤表单,我需要验证recaptcha。 第一个问题是recaptcha是由函数 recaptcha_get_html($ publickey)生成的,所以我无法在input元素中手动添加属性。尽管如此,我在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)但是没有任何反应...... 我需要一些帮助。 THX

1 个答案:

答案 0 :(得分:0)

我认为你的问题与CAPTCHA一代有关。 以下行不起作用:

$("#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');

这些属性与#recaptcha_response_field无关,因为该字段是在这些调用之后创建的。 您可以签入页面源代码。

一种选择是定义新的自定义主题,以避免自动生成HTML代码。 https://developers.google.com/recaptcha/docs/customization?hl=fr