【问题标题】:Parsley Remote Recaptcha ValidationParsley 远程验证码验证
【发布时间】: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


【解决方案1】:

我认为您的问题与 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-12
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多