Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Снова email, снова... (https://javascript.ru/forum/misc/46339-snova-email-snova.html)

Kimtom 06.04.2014 15:33

Снова email, снова...
 
Здравствуйте, попросили сделать отправку email с сайта. И если на странице одна форма, то всё работает. Но формы на одной странице 2 и они имею разные поля. Отправка, почему то, не работает :cray:

<form class="form" id="free-form" style="width:555px;" action="#" method="post" onsubmit="okSend()">
		            <div class="controls">
		                <input type="text" name="trial_name" id="trial_name" class="form-control"  placeholder="Имя" required>
		            </div>
		            <div class="controls">
		                <input name="trial_email" id="trial_email" type="text"  class="form-control"  placeholder="Email"  required>
		            </div>
		            <div class="controls send">
		              <button type="submit" class="btn btn-lg">Получить пробный урок</button>
		            </div>
		          </form>


под формой сразу javascript
<script type="text/javascript">
	$.ajax({
        type: "POST",
        url: "sendtrial.php",
        data: document.forms["free-form"].serialize(),
        success: document.forms.free-form.reset();
        }
    });
</script>


далее по коду другая форма с другим id и другими полями. Соответственно, там другой файл php. Однако, ничего не отправляется :cray:
Подзреваю, что это страшный быдлокод. Подскажите, как сделать правильно?
Спасибо за понимание. Искал и ничего конкретного не нашел. Всё равно что то не получалось :-E
А ещё не знаю куда поставить document.forms.free-form.reset();, что бы форма после отправки очистилась

jsnb 06.04.2014 16:09

Вставить на страницу:
$(document).ready(function() {
  $('form').on('submit', function() {
    $.ajax({
     type: "POST",
     url: this.action,
     data: $(this).serialize()
    });
    this.reset();
    return false;
  });
});

Формы будут отправляться на тот скрипт, который указан в атрибуте action тега form. И что за функция okSend в onsubmit стоит?

P.S. Этот код подходит только если на странице нет и не планируется других форм, кроме отправки мыла. Если есть другие формы, то выборку делайте по id.

Kimtom 06.04.2014 16:22

okSend просто выводит alert о том, что письмо отправлено...

Kimtom 06.04.2014 16:23

это вставить где то внизу страницы?
На форме ещё есть кнопки paypal, а они как раз имеют формат

<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
....
</form>

jsnb 06.04.2014 16:32

Цитата:

Сообщение от Kimtom (Сообщение 306412)
okSend просто выводит alert о том, что письмо отправлено...

Цитата:

Сообщение от Kimtom (Сообщение 306413)
это вставить где то внизу страницы?
На форме ещё есть кнопки paypal, а они как раз имеют формат

Тогда убрать onsubmit из тега form и делать выборку по id форм. Как-то так:
$(document).ready(function() {
  $('#form_id1, #form_id2').on('submit', function() {
    var form = this;
    $.ajax({
      type: "POST",
      url: this.action,
      data: $(this).serialize(),
      success: function() {
        alert('успех');
        form.reset();
      },
      error: function() {
        alert('ошибка');
      }
    });
    return false;
  });
});


form_id1 и form_id2 заменить на id форм. Символ "#" не трогать, запятую тоже. Вставлять в любое место страницы (в тег script естетсвенно), код сработает только после загрузки документа.

Kimtom 06.04.2014 16:53

выводится "успех", но письмо не приходит. Хотя сами скрипты php рабочие и находятся в том же каталоге, что и страница index.hml
Вот один из них:

<?php
if($_POST){
	$to = "mymail@m.mail";
	$c_name = trim(strip_tags(stripslashes($_POST['trial_name'])));
	$c_mail = trim(strip_tags(stripslashes($_POST['trial_email'])));

	if (c_name!="" && c_mail!="") {
	    $message = "
<html> 
	<body> 
		<b>Новое сообщение!</b><br/> 
		<b>Имя:</b> {$c_name}<br/> 
		<b>E-mail:</b> {$c_mail}<br/> 
	</body> 
</html>"; 
	
		$subject = "Пробный урок";
	    $headers = "MIME-Version: 1.0\r\n"; 
	$headers .= "Content-type: text/html; charset=utf-8\r\n"; 
	    $headers .= "From: {$c_mail}\r\n"; 
	
    mail($to, $subject, $message, $headers);
}
?>

jsnb 06.04.2014 17:31

Закрывающей скобки для второго if в скрипте нет...

Kimtom 06.04.2014 17:42

:dance:
Вот я голова соломенная. Теперь работает, спасибо!
Теперь осталось добавить проверки и всё.
Спасибо большое!


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