BadassRolf
@BadassRolf

Как убрать загрузку всей страницы после отправки формы?

Есть самая обычная форма, написанная рукам.
Обработчик
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['phone'])) {$phone = $_POST['phone'];}
    if (isset($_POST['text'])) {$text = $_POST['text'];}
    if (isset($_POST['formData'])) {$formData = $_POST['formData'];}

    $to = "artyomunder@gmail.com"; /*Укажите адрес, га который должно приходить письмо*/
    $sendfrom   = "support@sitename.ru"; /*Укажите адрес, с которого будет приходить письмо, можно не настоящий, нужно для формирования заголовка письма*/
    $headers  = "From: " . strip_tags($sendfrom) . "\r\n";
    $headers .= "Reply-To: ". strip_tags($sendfrom) . "\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html;charset=utf-8 \r\n";
    $subject = "$formData";
    $message = "$formData<br/>
 <b>Имя пославшего:</b> $name<br/>
<b>Телефон:</b> $phone<br/>
<b>Сообщение:</b>$text
";
    $send = mail ($to, $subject, $message, $headers);
    if ($send == 'true')
    {
        echo '<center>Ваше сообщение отправлено, спасибо! Наш менеджер свяжется с Вами в ближайшее время.</center>';
    }
    else
    {
        echo '<center>
 
<b>Ошибка. Сообщение не отправлено!</b>
 
</center>';
    }
}?>


Js
$(function(){
        $('.form-footer').on('submit', function(e){
            e.preventDefault();
            var $that = $(this),
                formData = new FormData($that.get(0));
            $.ajax({
                url: $that.attr('action'),
                type: $that.attr('method'),
                contentType: false,
                processData: false,
                data: formData,
                dataType: 'html',
                success: function(form){
                    if(form){
                        $that.replaceWith(form);
                    }
                }
            });
        });
    });

Форма
<form class="form-footer" action="" method="post">
    <div class="row">
        <div class="col-md-6 npl"><input type="text" name="name" class="input-medium placeh-white" placeholder="Ваше имя"></div>
        <div class="col-md-6 npall"><input type="text" name="phone" class="input-medium placeh-white" placeholder="Ваш телефон"></div>
        <div class="col-md-12 npall">
            <textarea placeholder="Ваше сообщение" name="text" class="placeh-white"></textarea>
        </div>
        <button class="btn-medium" type="submit" name="submit">Отправить</button>
    </div>
</form>


Все работает, все отправляет, но после отправки загружается вся страница сайта в место, где была форма.
Сайт на битриксе, что за байда?
  • Вопрос задан
  • 945 просмотров
Пригласить эксперта
Ответы на вопрос 3
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Попробуйте убрать обёртку
$(function(){ ... })
Раз страница перегружается, значит не отрабатывает скрипт, там где-то ошибка. Что пишет консоль?
Ответ написан
Stalker_RED
@Stalker_RED
js работает нормально, проблема в том, что сервер отдает вам "всю страницу".

Тупой фикс:
echo '<center>Ваше сообщение отправлено, спасибо! Наш менеджер свяжется с Вами в ближайшее время.</center>';
exit; /* в этом месте php завершает работу */


А по хорошему, было бы неплохо разобраться с вашей CMS.
Ответ написан
AlexeyGfi
@AlexeyGfi
YouTube >>> Битриксоид из Колхоза
Вынесите обработчик в отдельный файл. Судя по всему, он вызывается «в окружении» остальной страницы
Чтобы было например так:
<?
//Минимальный пролог — если нужно использоваться Битрикс-API
require($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

//Ваш обработчик
***
?>


Через аякс посылайте данные на него, в ответе принимайте текст или JSON.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы