@baomastr

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

Доброго времени суток! Я начинающий фронт. С аяксоми первый раз работаю, прошу помощи в разъяснении, гугл не выручил(
имею следующую задачу.
при клике на кнопку всплывает попап, в котором находится окошко чата с одним инпутом. Пользователь строит диалог с ботом и при каждом сабмите формы данные должны аяксом отправляться на серве, а сообщение из инпута перемещается в окно чата.
Писал всё локально, без сервера, работает, сообщения в чатик поступают. Но как залил на сервер при сабмите происходит переход на 404, либо вообще не сабмитится, если использовать event.preventDefault();
Пробовал убирать кнопку c type="submit и ставить простой span вместо него, всё равно страница перезагружается после отправки данных формы.
Прошу подсказать, как сделать, чтоб код работал как на локальной машине.

код функции для отправки данных на сервер:

$( document ).ready(function() {

    function AjaxFormRequest() {

        var messages = [].slice.call(document.getElementById('chatbot-message').querySelectorAll('.from-user'));
        var lastMsg = document.getElementById('chatbot-input').value;
        var filteredMessages = messages.map(
                (msgBlock) => {
                return msgBlock.textContent.replace('Вы: ', '')
            })
        console.log(filteredMessages);
        console.log(lastMsg);

        $.ajax({
            url: "test.php",
            type: "POST",
            dataType: "html",
            data: JSON.stringify(filteredMessages + ' , ' + lastMsg),
//            success: function(res) {
//                alert(res);
//            }
//            error: function(res) {
//                alert('shit happens');
//            }
        });
    }

    $("#chatbot-submit").click(
        function(){
            AjaxFormRequest(null, $("#chatForm").attr("action"));
//            e.preventDefault();
//                return false;
        }
    )
});


здесь весь код
  • Вопрос задан
  • 2552 просмотра
Решения вопроса 2
@Kostik_1993
Web Developer
Что за ад. При вызове функции у тебя передаются аргументы, но в самой функции они не указаны.

Все реализуется гораздо проще.
$(function () {
  
  var myForm = $('form');
  myForm.on('submit', function() {
  
      $.ajax(
          // Тут отправляем AJAX запрос, очищаем поле, вставляем сообщение в чат и т.д.
      );

      // Чтоб страница не перезагрузилась
      return false;
  });

  $("#chatbot-submit").on('click', function() {
      myForm.submit();
  });

});
Ответ написан
trushka
@trushka
Обработчик не та клик сабмита ставить надо, а на сабмит формы:
$("#chatForm").submit(function(){
.........
return false
})

Всё, на кнопку никакого дополнительного обработчика вешать не нужно - форма и так отправится и по клику на неё, и по энтеру. Вернее, не отправится, а сработает ваш обработчик, и отправит аякс-запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
it_proger29
@it_proger29
Битрикс
<form onsubmit="return false;">
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы