
24.08.2016, 13:31
|
 |
Аспирант
|
|
Регистрация: 05.06.2014
Сообщений: 92
|
|
Не работает асинхронная отправка формы
всем привет. Есть сайт http://brasletic.ru/
Там есть форма "Заполни форму сейчаси получи скидку 70 %". Заполняю поля "Имя" и "Телефон", жму "Получить скидку 70%" - по идее должно письмо идти на почту, которая указана в order.php. Но ничего не приходит. Всегда выполняется функция error. Народ, помогите пожалуйста.
Вот сам AJAX метод, содержится прям в index.htm, само собой jQuery предварительно подключен:
<script type="text/javascript">
function AjaxFormRequest() {
jQuery.ajax({
url: 'order.php', //Адрес подгружаемой страницы
type: "POST", //Тип запроса
dataType: "text", //Тип данных
data: jQuery("#order_form").serialize(),
success: function(response) { //Если все нормально
alert('Сообщение отправлено!');
},
error: function(response) { //Если ошибка
alert('Error!');
}
});
}
</script>
Вот файл order.php:
<?php
if (strlen($_POST['phone']) > 5) {
$to = 'моя_почта@mail.ru';
$subject = 'Новая заявка с сайта brasletic.ru';
$headers = "Content-type: text/html; charset=utf-8 \r\n";
$headers .= "From: brasletic\r\n";
$message = '
<html>
<head>
<title>'.$subject.'</title>
</head>
<body>
<p>Имя: '.$_POST['name'].'</p>
<p>Телефон: '.$_POST['phone'].'</p>
</body>
</html>';
$send = mail($to, $subject, $message, $headers);
}
|
|

24.08.2016, 13:44
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Нужно блокировать отправку самой формы. А почтовые отправления так оформлять нельзя - заголовок Content-type: text/html; charset=utf-8 не определяет кодировку subject, subject нужно кодировать.
|
|

24.08.2016, 13:46
|
 |
Аспирант
|
|
Регистрация: 05.06.2014
Сообщений: 92
|
|
Может ты знаешь как это реализуется?
|
|

24.08.2016, 13:57
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Жмете в браузере F12, откроется отладчик, заходим в консоль и смотрим - ошибок куча. Сперва надо с ними разобраться, а уж потом вопросы задавать. Или показывайте код формы, как отправляется и т.д.. Ну или ждите кто в ошибках ваших копаться захочет, ну и т.д..
|
|

24.08.2016, 14:09
|
 |
Аспирант
|
|
Регистрация: 05.06.2014
Сообщений: 92
|
|
Вот код самой формы:
<form class="form text-top" method="post" id="order_form">
<div class="fields incon pad-invert"> <div class="incon" style="width: auto;"> <div class="field" data-type="name">
<div class="name"> <div class=""> Имя <span class="required">*</span> </div> </div> <div class="input">
<input type="text" name="name" class="form-control" style="border-radius: 30px; border-color: rgb(220, 220, 220); color: rgb(49, 49, 49); background-color: rgba(246, 246, 246, 0.439216);">
</div> </div> </div><div class="incon" style="width: auto;"> <div class="field" data-type="phone"> <div class="name"> <div class=""> Телефон <span class="required">*</span> </div> </div> <div class="input">
<input type="text" name="phone" class="form-control" style="border-radius: 30px; border-color: rgb(220, 220, 220); color: rgb(49, 49, 49); background-color: rgba(246, 246, 246, 0.439216);">
</div> </div> </div> </div> <div class="macros-button"><div class="btn-out full xs-none"> <div class="btn-inner incon"> <button class="btn submit font-text" id="uid116" data-action="" hack-data-id="" data-ym_goal="" data-ga_category="" data-ga_action="" data-id="">
<span class="text">Получить скидку 70%</span>
<input onclick="AjaxFormRequest();" value=""> </button>
</style>
</div>
</div>
</div>
</form>
До меня делалось, возможно лишнего много.
|
|

24.08.2016, 14:24
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Зачем в коде формы <input onclick="AjaxFormRequest();" value="">? Он вообще ничего полезного не делает, выбросить и:
function AjaxFormRequest() {
$(function() {
$("#order_form").submit(function(e) {
e.preventDefault();
jQuery.ajax({
url: 'order.php', //Адрес подгружаемой страницы
type: "POST", //Тип запроса
dataType: "text", //Тип данных
data: jQuery(this).serialize(),
success: function(response) { //Если все нормально
alert('Сообщение отправлено!');
},
error: function(response) { //Если ошибка
alert('Error!');
}
});
});
});
}
Вашу форму можно даже пустой отправить.
PS. dataType - это тип данных ожидаемых от сервера, в коде не видно чтобы сервер вообще отвечал.
Последний раз редактировалось laimas, 24.08.2016 в 14:26.
|
|

24.08.2016, 14:49
|
 |
Аспирант
|
|
Регистрация: 05.06.2014
Сообщений: 92
|
|
А кнопку то зачем удалять? вызов метода - тут ещё понятно. Отправлять данные то надо по событию - т.е. по клику на кнопку. Я оставил кнопку, добавил type="submit", событие oncklick удалил. в тег <form> добавил method="post". Всё равно не работает. Просто перезагружает страницу и всё, никакие данных на почту не приходят.
|
|

24.08.2016, 14:54
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от fenix_63
|
А кнопку то зачем удалять?
|
<input onclick="AjaxFormRequest();" value=""> - это разве кнопка? Фрма отправляется button, вот что в форме кнопка, а input по умолчанию есть тип text. Вот чего он делает в форме?
Сообщение от fenix_63
|
Просто перезагружает страницу и всё, никакие данных на почту не приходят.
|
Потому и перегружает страницу, потому как форма отправляется button, а чего вы там наколбасили, ей по барабану. )
PS. Чуть не забыл - сюда и проверить <button><input /></button>
Последний раз редактировалось laimas, 24.08.2016 в 15:04.
|
|

24.08.2016, 15:04
|
 |
Аспирант
|
|
Регистрация: 05.06.2014
Сообщений: 92
|
|
Убрал полностью input, оставил только button - всё равно данные не отправляются, и страница перезагружается. Я уж прям и не знаю что делать 
|
|

24.08.2016, 15:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
$(function() {//это обработка события onload документа, не будет работать, если есть конфликт с JQ по использованию $. Есть такая ошибка в консоли?
$("#order_form").submit(function(e) { //а это установка обработчика отправки формы после готовности документа.
//берем и проверяем просто
alert(1); //сюда то хоть попадаем?
e.preventDefault(); //это предотвращает естественную отправку формы
jQuery.ajax({
url: 'order.php', //Адрес подгружаемой страницы
type: "POST", //Тип запроса
dataType: "text", //Тип данных
data: jQuery(this).serialize(),
success: function(response) { //Если все нормально
alert('Сообщение отправлено!');
},
error: function(response) { //Если ошибка
alert('Error!');
}
});
});
});
|
|
|
|