Я недавно добавил AJAX в рабочую контактную форму, в которую уже встроена reCaptcha, поэтому форму можно отправить без загрузки новой страницы, и у меня возникают проблемы с получением g-recaptcha-response. Я оставил PHP-код reCaptcha с того момента, когда он работал, и я не уверен, что мне нужно изменить или добавить, чтобы он снова заработал.
Форма:
<form name="contact-form" action="mail.php" method="POST">
<div class="col-6">
<label for="name">Name*</label>
<input type="text" name="name" placeholder="Your company.." required>
<label for="company">Company*</label>
<input type="text" name="company" placeholder="Your company.." required>
<label for="phone">Phone</label>
<input type="text" name="phone" placeholder="Your phone..">
<label for="email">Email*</label>
<input type="text" name="email" placeholder="Your email.." required>
</div>
<div class="col-6">
<label for="message">Message*</label>
<textarea name="message" placeholder="Write something.." required></textarea>
<div class="g-recaptcha" data-theme="light" data-sitekey="#"></div>
<input id="submit" type="button" name="submit" value="SEND">
</div>
</form>
JavaScript:
var submit = document.getElementById('submit');
var form = document.forms["contact-form"];
function submitFormAjax() {
var name = form['name'].value;
var company = form['company'].value;
var phone = form['phone'].value;
var email = form['email'].value;
var message = form['message'].value;
var xmlhttp= window.XMLHttpRequest ?
new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
xmlhttp.open("POST","mail.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("name=" + name + "&company=" + company + "&phone=" + phone + "&email=" + email + "&message=" + message);
}
submit.onclick = function(e) {
if (grecaptcha.getResponse() == ""){
alert("Please click the reCAPTCHA checkbox!");
return false;
} else {
submitFormAjax();
}
}
PHP-файл:
<code><?php
//reCAPTCHA
$public_key = "#";
$private_key = "#";
$url = "https://www.google.com/recaptcha/api/siteverify";
$response_key = $_POST['g-recaptcha-response'];
$response = file_get_contents($url.'?secret='.$private_key.'&response='.$response_key.'&remoteip='.$_SERVER['REMOTE_ADDRESS']);
$response = json_decode($response);
//For trouble shoooting
// echo "<pre>";print_r($_POST);echo "
";
// echo "
";print_r($response);echo "
";
if ($ response-> success == 1) {
$ name = $ _POST ['name'];
$ company = $ _POST ['company'];
$ phone = $ _POST ['phone'];
$ email = $ _POST ['email'];
$ message = $ _POST ['message'];
$ formcontent = "От: $ name \ n Компания: $ company \ n Телефон: $ phone \ n Электронная почта: $ email \ n Сообщение: $ message";
$ receient = "justin.toland@powereng.com, jason.pfaff@powereng.com";
$ subject = "Запрос Geovoice.io";
$ mailheader = "From: $ email \ r \ n";
mail ($ получатель, $ subject, $ formcontent, $ mailheader) или die («Ошибка!»);
}
?>
В настоящее время после нажатия кнопки «Отправить» первое, что появляется во всплывающем сообщении: «Неопределенный индекс: g-recaptcha-response». Я оставил ключи reCaptcha для этого примера.