Задать вопрос
@IT-Programmer

Ajax функция выполняется дважды как можно решить данный вопрос?

У меня возникла проблема, скрипт дважды отправляет сообщение на почту причём первое с данными которые я ввёл, а второе пустое.
[ html-form.php ]:

<!DOCTYPE html>
<html lang="ru">
<head>
	<meta charset="UTF-8">
	<title>Ajax-форма</title>
	<link rel="stylesheet" href="main.css">
</head>
<body>
	<form class="form" id="form" name="form">
		<input type="text" class="form-field" name="name" placeholder="Введите ваше имя">
		<input type="text" class="form-field" name="phone" placeholder="Введите ваш телефон">
		<button class="form-button"><span class="text-button">Отправить заявку</span></button>
	</form>
	<footer>
		<div class="overlay js-overlay-thank-you">
			<div class="popup js-thank-you">
				<h2>Спасибо за заявку</h2>
				<div class="close-popup js-close-thank-you"></div>
			</div>
		</div>
	</footer>
	<div id="otv">   
	</div>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
	<script src="main.js"></script>
	<script src="jquery.maskedinput.js"></script>
</body>
</html>


[ main.js ]:

// Отправка заявки 
$(document).ready(function() {
	$('#form').submit(function() { // проверка на пустоту заполненных полей. Атрибут html5 — required не подходит (не поддерживается Safari)
		if (document.form.name.value == '' || document.form.phone.value == '' ) {
			valid = false;
			return valid;
		}
		$.ajax({
			type: "POST",
			url: "mail.php",
			data: $(this).serialize()
		}).done(function() {
			$('.js-overlay-thank-you').fadeIn();
			$(this).find('input').val('');
			$('#form').trigger('reset');
			$('#otv').load('mail.php');
		});
		return false;
	});
});
// Закрыть попап «спасибо»
$('.js-close-thank-you').click(function() { // по клику на крестик
	$('.js-overlay-thank-you').fadeOut();
});
$(document).mouseup(function (e) { // по клику вне попапа
    var popup = $('.popup');
    if (e.target!=popup[0]&&popup.has(e.target).length === 0){
        $('.js-overlay-thank-you').fadeOut();
    }
});


[ mail.php ]:

<?php
if($_POST['name']='' || $_POST['phone']=''){
    
}else{
$recepient = "test@gmail.com";
$siteName = "Тест";
$from = "test";

$name = trim($_POST["name"]);
$phone = trim($_POST["phone"]);
$message = "Имя: $name \nТелефон: $phone";

$pagetitle = "Заявка с сайта \"$siteName\"";
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $from");
echo 'Сообщение отправлено на '.$recepient;
}
?>
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Простой 11 комментариев
Пригласить эксперта
Ответы на вопрос 2
Конечно, вы грузите после отправки $('#otv').load('mail.php') скрипт, который пустой.
Ответ написан
Комментировать
Alibek_Mussin
@Alibek_Mussin
PHP-разработчик
Ну что это такое?
if($_POST['name']='' || $_POST['phone']=''){
Это ж условие

if($_POST['name']=='' || $_POST['phone']==''){
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы