首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ajax实现同步不可见的recaptcha

用ajax实现同步不可见的recaptcha
EN

Stack Overflow用户
提问于 2020-09-15 21:39:35
回答 1查看 171关注 0票数 0

因此,我试图弄清楚如何从Recaptcha获得令牌或有效的响应,然后运行ajax调用。有谁知道我怎么能同步做这件事吗?

当用户单击“提交”时,该过程将是:

如果Recaptcha响应是好的,

  1. 能够通过必需的属性和模式验证表单字段
  2. 获取Recaptcha令牌或response
  3. 运行Ajax

代码语言:javascript
复制
function onSubmit(token) {

  grecaptcha.execute()
  var response = grecaptcha.getResponse();
  return response.length;
}

$('#contact-form').submit(function(event) {
  event.preventDefault();


  if (onSubmit()) {

    jQuery.ajax({
      url: "/ipostal-office/send-email.php",
      data: $('#contact-form').serialize(),
      type: "POST",
      complete: function(data) {
        console.log(data.responseText);
      },
      success: function(data) {
        // console.log(data);
        $('#contact-form').fadeOut();
        $('#success').fadeIn();
      },
      error: function(data) {
        console.log(data.responseText);
        $('#error').fadeIn();
        $('#contact-form').fadeOut();
      }
    });

  }
});
代码语言:javascript
复制
#form-div {
  border-radius: 4px;
  border: 1px solid #e8e8e8;
  padding: 1rem 1rem 1.5rem 1rem;
}

#form-div .hide {
  display: none;
  text-align: center;
}
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<div id="form-div">

  <h2>Contact Us to Learn More</h2>

  <div id="success" class="hide">
    <p>Your message was sent successfully! </p>
  </div>

  <div id="error" class="hide">
    <p>Something went wrong, <br> try refreshing and submitting the form again.</p>
  </div>

  <form id="contact-form" action="send-email.php" method="post">

    <div class="input-field-div">
      <input type="text" id="name" name="name" placeholder=" " minlength='2' pattern="^[a-zA-Z ]*$" title="Only letters and white space allowed" required>
      <label for="name">Name*</label>
    </div>

    <div class="input-field-div">
      <input type="text" id="title" name="title" placeholder=" ">
      <label for="title">Title</label>
    </div>

    <div class="input-field-div">
      <input type="text" id="company" name="company" minlength='2' placeholder=" " required>
      <label for="company">Company*</label>
    </div>

    <div class="input-field-div">
      <input type="text" id="address" name="address" placeholder=" ">
      <label for="address">Address</label>
    </div>

    <div class="input-field-div">
      <input type="email" id="email" name="email" placeholder=" " required>
      <label for="email">Email*</label>
    </div>

    <div class="input-field-div">
      <input type="tel" id="phone" name="phone" placeholder=" ">
      <label for="phone">Phone</label>
    </div>

    <div class="message-field-div">
      <textarea name="message" id="message" rows="7" placeholder=" " minlength='2' required></textarea>
      <label for="message">Message</label>
    </div>

    <div id='recaptcha' class="g-recaptcha" data-sitekey="6LebLMwZAAAAAEGMbnSYotyk9do2pAXL97t0-6C8" data-callback="onSubmit" data-size="invisible"></div>

    <button id="submit-btn" type="submit">
                        Submit <i class="fas fa-paper-plane"></i>
                    </button>

  </form>

</div>

EN

回答 1

Stack Overflow用户

发布于 2020-10-30 13:05:51

如果您在表单grecaptcha.execute()事件处理程序中调用submit,并将AJAX调用移到onSubmit函数中,这应该可以工作。

表单提交处理程序将阻止实际提交并启动异步reCAPTCHA。当reCAPTCHA响应可用时,它将在表单中插入一个隐藏的输入字段并调用onSubmit。

代码语言:javascript
复制
function onSubmit(token) {
  //Submit via AJAX
  alert($('#contact-form').serialize());
}

$('form').submit(function(e) {
  event.preventDefault();
  grecaptcha.execute();
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<form id="contact-form">
  <input type="text" name="name" required>
  <div id='recaptcha' class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI" data-callback="onSubmit" data-size="invisible"></div>
  <button type="submit">Submit</button>
</form>

请注意,由于来源无效,在此处嵌入时,该示例无法正确工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63910205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档