форма обратной связи
Всем доброго времени суток.
Нашел на просторах интернета AJAX форму обратной связи. Но она работает не корректно. Все время пишет что сообщение не отправлено. Подозреваю что проблема в JS скрипте. Помогите разобраться.
jQuery(document).ready(function($){
//в этой функции отслеживается изменение чекбокса "я не робот"
$(document).on('change', '.fofm input:checkbox', function() {
if($(this).is(':checked')){
$(".fofm input[type=submit]").removeAttr('disabled');
$('.fofm input[type=hidden].valTrFal').val('valTrFal_true');
}
else {
$(".fofm input[type=submit]").attr('disabled','disabled');
$('.fofm input[type=hidden].valTrFal').val('valTrFal_disabled');
}
});
//закрытие модального окна
$('.close_modal, .overlay').click(function (){
$('.popup, .popup2, .overlay').css({'opacity':'0', 'visibility':'hidden'});
$('.popup > .fofm textarea').val('');
//сброс всех полей формы обраной связи
$(':input','.fofm').not(':button, :submit, :reset, :hidden').val('').removeAttr('checked').removeAttr('selected');
$(".fofm input[type=submit]").attr('disabled','disabled');
});
//показ модального окна
$('.open_modal').click(function (e){
e.preventDefault();
$('.popup, .overlay').css({'opacity':'1', 'visibility':'visible'});
});
//аякс форма обратной связи
//проверяет какой ответ был получен
//и в зависимости от ответа
//выводит информацию о статусе
//отправки письма
$(".fofm").submit(function() {
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "php/contact.php",
data: str,
success: function(msg) {
if(msg == 'ok') {
$('.popup2, .overlay').css('opacity','1');
$('.popup2, .overlay').css('visibility','visible');
$('.popup').css({'opacity':'0','visibility':'hidden'});
}
else {
$('.popup2 .window').html('<h5>Ошибка</h5><p>Сообщение не отправлено, убедитесь в правильности заполнение полей</p>');
$('.popup2, .overlay').css('opacity','1');
$('.popup2, .overlay').css('visibility','visible');
$('.popup').css({'opacity':'0','visibility':'hidden'});
}
}
});
return false;
});
});
<div class="overlay"></div>
<div class="popup">
<div class="close_modal">x</div>
<form class="fofm" action="">
<h5>Форма обратной связи</h5>
<input type="text" required="" placeholder="Имя" name="txtname">
<input type="email" placeholder="Email" name="txtemail">
<input type="tel" pattern="^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$" required="" placeholder="Телефон" name="txtphone">
<textarea name="txtmessage" placeholder="Описание" rows="10"></textarea>
<label><input type="checkbox">Я не робот</label>
<input type="hidden" name="valTrFal" class="valTrFal" value="valTrFal_disabled">
<input type="submit" class="button" value="Отправить" disabled="disabled" name="btnsend">
</form>
</div>
<div class="popup2">
<div class="close_modal">x</div>
<div class="window">
<div class="insText">
<h5>запрос отправлен</h5>
<p><strong>Ваш запрос отправлен.</strong>Наш менеджер свяжется с вами в ближайшее время!</p>
<hr>
<p>Предлагаем подробную информацию по продукции:</p>
</div>
</div>
</div>
|
success: function(msg) {
if(msg == 'ok') {
$('.popup2, .overlay').css('opacity','1');
$('.popup2, .overlay').css('visibility','visible');
$('.popup').css({'opacity':'0','visibility':'hidden'});
}
else {
$('.popup2 .window').html('<h5>Ошибка</h5><p>Сообщение не отправлено, убедитесь в правильности заполнение полей</p>');
$('.popup2, .overlay').css('opacity','1');
$('.popup2, .overlay').css('visibility','visible');
$('.popup').css({'opacity':'0','visibility':'hidden'});
}
}
Очевидно что на сервере нужно возвращать 'ok', так что ищи проблему там :) |
Spass,
Это понятно что на сервере нужно возвращать 'ok'. Вот только не понятно где именно ошибка в скрипте. |
<?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 = 'zakaz@mosmsater.ru';
$fromName = 'NameSendler';
// Сюда введите Ваш email
$emailTo = 'user5@user.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';
}
?>
|
Разобрался.
Была ошибка синтаксиса в contact.php в 23 строке. |
Цитата:
PS. И уберите ошибку в РНР коде - строка 23 не закрыта кавычкой |
maxg5, тебе говорят убери отправку письма на введенный в форме адрес. Иначе с твой формы начнут хреначить спам на весь рунет.
|
Цитата:
if (trim($_POST['valTrFal'])=='valTrFal_true') {
/* тут обработка, отправка и редирект */
}
else {
/* тут рендер формы*/
}
UPD, вот оно чо - if(msg == 'ok') - премило. То есть сервер ничего не может написать и ответить. Идиотский скрипт. |
Цитата:
|
Цитата:
Просто форму сперва надо изобразить как объект со свойствами и методами. Но для ТС это уже совсем-совсем другая история. |
| Часовой пояс GMT +3, время: 01:25. |