Некорректно работает форма AJAX

188
05 апреля 2018, 12:35

Что не так не могу понять. Форма работает через раз и не всегда до конца. Сообщения отправляются всё ок. Но бывает не появляется alert и редирект на страницу о завершении отправки. 1я форма

<form class="header__input-group" id="call-form">
                            <input name="name" class="form-control header__input" type="text" placeholder="Имя" required="required">
                            <input name="phone" class="form-control header__input" id="phone" type="text" placeholder="Телефон" required="required">
                            <input type="submit" class="btn btn-default form-btn" value="Записаться"></input>
</form>

2я форма

<form class="" id="call-form2">
                <input name="name" class="form-control input-popup" type="text" placeholder="Имя" required="required">
                <input name="phone" class="form-control input-popup" id="phone2" type="text" placeholder="Телефон" required="required">
                <input type="submit" class="btn btn-default" value="Записаться"></input>
</form>

Обработка AJAX

$(document).ready(function(){
    $("#call-form, #call-form2").submit(function() { //устанавливаем событие отправки для формы с id=form
    var form_data = $(this).serialize(); //собераем все данные из формы
        $.ajax({
        type: "POST", //Метод отправки
        url: "mail.php", //путь до php фаила отправителя
        data: form_data,
        success: function() {
            //код в этом блоке выполняется при успешной отправке сообщения
            alert("Ваше сообщение отправлено!");
            window.location = "success.php";
            }
        });
    });
});
Answer 1

Вы не отменяете стандартную отправку формы. Из-за этого возникает race condition между запросом ajax и запросом формы. Какой из них вернется на клиент раньше - предсказать нельзя. Этим и объясняется наблюдаемое поведение "работает через раз и не всегда до конца".

$(document).ready(function(){
    $("#call-form, #call-form2").submit(function() { //устанавливаем событие отправки для формы с id=form
        var form_data = $(this).serialize(); //собираем все данные из формы
        $.ajax({
          type: "POST", //Метод отправки
          url: "mail.php", //путь до php фаила отправителя
          data: form_data,
          success: function() {
            //код в этом блоке выполняется при успешной отправке сообщения
            alert("Ваше сообщение отправлено!");
            window.location = "success.php";
          }
        });
        return false; // !!!
    });
});
Answer 2

Чтобы не срабатывал subimt

   $("#call-form, #call-form2").submit(function(e)
    --skip code--
    //вместо return false
     e.preventDefault();
Answer 3

Наверно вам надо добавить обработчик возврата ошибки.

error: function(err){
   alert(err);
}
READ ALSO
Не работает mysql_fetch_array

Не работает mysql_fetch_array

Есть таблица users, в ней две колонки - id и loginДля примера, первая запись - id 1, login 7433

183
Не работает ссылка после pjax?

Не работает ссылка после pjax?

Здравствуйте! На странице есть GridView обернутый в pjax с фильтрамиНа каждую запись добавлена ссылка:

209
Парсер фото разного размера из группы ВКонтакте

Парсер фото разного размера из группы ВКонтакте

Всем приветЯ только учусь :) Делаю сайт для автодрома горячийлед

169
Проблема подключения к MariaDB

Проблема подключения к MariaDB

Добрый деньЕсть проблема подключения к БД MariaDB на хостинге

174