Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Двойная отправка сообщений (https://javascript.ru/forum/jquery/61892-dvojjnaya-otpravka-soobshhenijj.html)

Vladislav306907 14.03.2016 11:17

Двойная отправка сообщений
 
Добрый день, помогите найти проблему, пожалуйста. Добавил аяксовый скрипт, который формирует всплывающее окно и после очищает форму.
$(".fofm").submit(function() {
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "contact.php",
data: str,
success: function(msg) {
if(msg == 'ok') {
$('.contwindow').html('<p>Спасибо за ваше обращение!</p><br><p>Наше специалист свяжется с вами в ближайшее время</p>');
$('.contwindowhide').fadeIn(400).delay(2000).fadeO ut(400);
jQuery(".fofm").trigger("reset");
$.arcticmodal('close');
}
else {
/*
$('.contwindow_error').html('<p>Письмо не отправленно, проверьте заполненость полей.</p>');
$('.popup2, .overlay').css('opacity','1');
$('.popup2, .overlay').css('visibility','visible');
$('.contwindowhide').css({'opacity':'1','visibilit y':'visible'}); */
}
}
});
return false;
});


После добавления этого скрипта все работает, но письмо на почту приходит 2 раза. В чем может быть дело?

Vladislav306907 14.03.2016 11:34

Даже вот так укоротить код если

$(".fofm").submit(function() {
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "contact.php",
data: str,
success: function(msg) {

$('.contwindow').html('<p>Спасибо за ваше обращение!</p><br><p>Наше специалист свяжется с вами в ближайшее время</p>');
$('.contwindowhide').fadeIn(400).delay(2000).fadeO ut(400);
jQuery(".fofm").trigger("reset");
$.arcticmodal('close');

}
});
return false;
});

laimas 14.03.2016 12:14

$(".fofm").submit(function(e) {
e.preventDefault()
;
$.ajax({
type: "POST",
url: "contact.php",
data: $(this).serialize(),
.......

Vladislav306907 14.03.2016 12:29

Все равно приходит 2 раза

$(".fofm").submit(function(e) {

e.preventDefault();
$.ajax({
type: "POST",
url: "contact.php",
data: $(this).serialize(),
success: function(msg) {

$('.contwindow').html('<p>Спасибо за ваше обращение!</p><br><p>Наше специалист свяжется с вами в ближайшее время</p>');
$('.contwindowhide').fadeIn(400).delay(2000).fadeO ut(400);
jQuery(".fofm").trigger("reset");
$.arcticmodal('close');

}
});
return false;
});

Vladislav306907 14.03.2016 12:33

Вот сама форма

<?php
//проверяем значения полученые при проверке скриптом формы
if (trim($_POST['valTrFal'])!='valTrFal_true') {
echo 'fasle';
}
else {

$txtname = trim($_POST['txtname']);

$txtNameValue = trim($_POST['name_class_value']);

$txtemail = trim($_POST['txtemail']);

$txtphone = trim($_POST['txtphone']);

$txtmessage = trim($_POST['txtmessage']);

// от кого
$fromMail = 'digrandcom@gmail.com';
$fromName = 'Ремонт-сервис';

// Сюда введите Ваш email
$emailTo = 'Vladislav306907@yandex.ru';


$subject = 'Форма обратной связи';
$subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
$headers = "Content-type: text/plain; charset=\"utf-8\"\r\n";
$headers .= "From: ". $fromName ." <". $fromMail ."> \r\n";

// тело письма
$body = "Письмо с сайта \n\nИмя: $txtname\nТелефон: $txtphone\ne-mail: $txtemail \nСообщение: $txtmessage";
$mail = mail($emailTo, $subject, $body, $headers, '-f'. $fromMail );


echo 'ok';
}
?>

laimas 14.03.2016 12:35

Без e.preventDefault() будет происходить обычная отправка формы, и не факт что при этом еще и $.ajax отправит.

Открывайте отладчик, смотрите что отправляется на сервер - если по onsubmit формы будет два запроса сервера, значит нужно проверить js-код, вплоть до того как инициализируется отправка, баг в нем. Если же запрос один, то баг в серверном скрипте.

laimas 14.03.2016 12:37

Это что if (trim($_POST['valTrFal'])!='valTrFal_true') за хрень?

Vladislav306907 14.03.2016 12:39

От предыдущего кодера осталось, я за ним правлю сижу

Vladislav306907 14.03.2016 12:41

Удалил эту часть, не нужна она

Vladislav306907 14.03.2016 12:44

http://prntscr.com/af1iff - 2 запроса, в коде не вижу косяка я


Часовой пояс GMT +3, время: 00:33.