带有 ajax 和 php 的 google recaptcha v2

海德尔

我正在尝试使用 ajax php 验证 google recaptcha v2,但它在没有验证我的代码的情况下提交。

if((fnameerr == "no") && (lnameerr == "no") && (emailerr == "no") && (cnameerr == "no") && (discounterr == "no") && (addresserr == "no") && (descerr == "no")){
                $.ajax({
                    url:"promoform.php",
                    method:"POST",
                    data:{fname:fname, lname:lname, email:email, cname:cname, discount:discount, address:address, desc:desc, website:website, captcha: grecaptcha.getResponse()},
                    success: function(data){
                        if($("#promotionSuccess").hasClass("hidden")){
                            $("#promotionSuccess").removeClass("hidden");
                        }
                        $("#mailErrorMessage").html(data);
                    }
                    });

从这里我将所有信息发送到我的另一个 php 页面,我正在那里验证 recaptcha:

$secret = "my secret key is here which I got from google";
$response = $_POST["captcha"];
$remoteip = $_SERVER['REMOTE_ADDR'];
$url = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secret&response=$response&remoteip=$remoteip");
$content = json_decode($url, TRUE);
if($content['success'] ==1){ do somthing}
阿米拉·德夫

如果要使用ajax提交表单,首先必须拦截提交动作并阻止默认行为。这可以通过两种方式完成。

  1. 通过 prevendDefault() 方法:

    $('#form').submit(function(e){ 
         e.preventDefault(); 
    
       // 处理这里
    })
    
  2. 通过返回假:

    $('#form').submit(function(e){ 
        // 这里处理
    
       return false; 
    })
    

除了捕获 submit() 事件,您还可以通过捕获提交按钮的点击事件来实现相同的行为:

$('#mysubmitbutton').click(function(e){
   e.preventDefault();
   // process here
})

或者你可以再次返回false。

当您的验证码验证完成后,如果成功,您就可以处理您的数据。例如保存在数据库中,发送电子邮件等。此外,您必须向浏览器回显一些响应,指示操作是否成功。然后您的 ajax 调用可以接听它并采取必要的操作:

if($content['success'] ==1){
    // valid -> do something

    echo json_encode(array('status' => 'true'));
    exit;
}
else{
    // not valid
    echo json_encode(array('status' => 'false'));
}

现在回到您进行 ajax 调用的位置,您可以按如下方式处理响应:

success: function(data){
  res = JSON.parse(data);    // parse response to a js object

  if(res.status == 'true')
  {
     alert('Form was submitted successfully!');
  }
  else
  {
     alert('Captcha validation falied! Please try again');
  }
}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章