我正在尝试使用 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提交表单,首先必须拦截提交动作并阻止默认行为。这可以通过两种方式完成。
通过 prevendDefault() 方法:
$('#form').submit(function(e){ e.preventDefault(); // 处理这里 })
通过返回假:
$('#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] 删除。
我来说两句