Last active
July 3, 2023 21:14
-
-
Save kickboxer/8cff5f1953eff4f8b573 to your computer and use it in GitHub Desktop.
ajax отправка формы на email с помощью jQuery и php
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$(document).ready(function() { // вся магия после загрузки страницы | |
$("#ajaxform").submit(function(){ // перехватываем все при событии отправки | |
var form = $(this); // запишем форму, чтобы потом не было проблем с this | |
var error = false; // предварительно ошибок нет | |
form.find('input, textarea').each( function(){ // пробежим по каждому полю в форме | |
if ($(this).val() == '') { // если находим пустое | |
alert('Заполните поле "'+$(this).attr('placeholder')+'"!'); // говорим заполняй! | |
error = true; // ошибка | |
} | |
}); | |
if (!error) { // если ошибки нет | |
var data = form.serialize(); // подготавливаем данные | |
$.ajax({ // инициализируем ajax запрос | |
type: 'POST', // отправляем в POST формате, можно GET | |
url: 'gogogo.php', // путь до обработчика, у нас он лежит в той же папке | |
dataType: 'json', // ответ ждем в json формате | |
data: data, // данные для отправки | |
beforeSend: function(data) { // событие до отправки | |
form.find('input[type="submit"]').attr('disabled', 'disabled'); // например, отключим кнопку, чтобы не жали по 100 раз | |
}, | |
success: function(data){ // событие после удачного обращения к серверу и получения ответа | |
if (data['error']) { // если обработчик вернул ошибку | |
alert(data['error']); // покажем её текст | |
} else { // если все прошло ок | |
alert('Письмо отвравлено! Чекайте почту! =)'); // пишем что все ок | |
} | |
}, | |
error: function (xhr, ajaxOptions, thrownError) { // в случае неудачного завершения запроса к серверу | |
alert(xhr.status); // покажем ответ сервера | |
alert(thrownError); // и текст ошибки | |
}, | |
complete: function(data) { // событие после любого исхода | |
form.find('input[type="submit"]').prop('disabled', false); // в любом случае включим кнопку обратно | |
} | |
}); | |
} | |
return false; // вырубаем стандартную отправку формы | |
}); | |
}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
if ($_POST) { // если передан массив POST | |
$name = htmlspecialchars($_POST["name"]); // пишем данные в переменные и экранируем спецсимволы | |
$email = htmlspecialchars($_POST["email"]); | |
$subject = htmlspecialchars($_POST["subject"]); | |
$message = htmlspecialchars($_POST["message"]); | |
$json = array(); // подготовим массив ответа | |
if (!$name or !$email or !$subject or !$message) { // если хоть одно поле оказалось пустым | |
$json['error'] = 'Вы заполнили не все поля! Обмануть решили? =)'; // пишем ошибку в массив | |
echo json_encode($json); // выводим массив ответа | |
die(); // умираем | |
} | |
if(!preg_match("|^[-0-9a-z_\.]+@[-0-9a-z_^\.]+\.[a-z]{2,6}$|i", $email)) { // проверим email на валидность | |
$json['error'] = 'Не верный формат email! >_<'; // пишем ошибку в массив | |
echo json_encode($json); // выводим массив ответа | |
die(); // умираем | |
} | |
function mime_header_encode($str, $data_charset, $send_charset) { // функция преобразования заголовков в верную кодировку | |
if($data_charset != $send_charset) | |
$str=iconv($data_charset,$send_charset.'//IGNORE',$str); | |
return ('=?'.$send_charset.'?B?'.base64_encode($str).'?='); | |
} | |
/* супер класс для отправки письма в нужной кодировке */ | |
class TEmail { | |
public $from_email; | |
public $from_name; | |
public $to_email; | |
public $to_name; | |
public $subject; | |
public $data_charset='UTF-8'; | |
public $send_charset='windows-1251'; | |
public $body=''; | |
public $type='text/plain'; | |
function send(){ | |
$dc=$this->data_charset; | |
$sc=$this->send_charset; | |
$enc_to=mime_header_encode($this->to_name,$dc,$sc).' <'.$this->to_email.'>'; | |
$enc_subject=mime_header_encode($this->subject,$dc,$sc); | |
$enc_from=mime_header_encode($this->from_name,$dc,$sc).' <'.$this->from_email.'>'; | |
$enc_body=$dc==$sc?$this->body:iconv($dc,$sc.'//IGNORE',$this->body); | |
$headers=''; | |
$headers.="Mime-Version: 1.0\r\n"; | |
$headers.="Content-type: ".$this->type."; charset=".$sc."\r\n"; | |
$headers.="From: ".$enc_from."\r\n"; | |
return mail($enc_to,$enc_subject,$enc_body,$headers); | |
} | |
} | |
$emailgo= new TEmail; // инициализируем супер класс отправки | |
$emailgo->from_email= 'dontforget.pro'; // от кого | |
$emailgo->from_name= 'Тестовая форма'; | |
$emailgo->to_email= $email; // кому | |
$emailgo->to_name= $name; | |
$emailgo->subject= $subject; // тема | |
$emailgo->body= $message; // сообщение | |
$emailgo->send(); // отправляем | |
$json['error'] = 0; // ошибок не было | |
echo json_encode($json); // выводим массив ответа | |
} else { // если массив POST не был передан | |
echo 'GET LOST!'; // высылаем | |
} | |
?> |
Огромное спасибо!
а что менять в php для отправки телефона вместо почты
Я изменил поле почты на телефон и теперь вылазит ошибка
alert(xhr.status); //200
alert(thrownError); //SyntaxError: Unexpected token D in JSON at position 0
не работает - a летает! благодарю!!!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Большое спасибо, работает чётко)))