Веб

Отправка формы через jQuery Ajax без перезагрузки страницы

Используйте jQuery для перехвата отправки формы, сериализуйте данные и отправьте их через $.ajax на form.php. Предотвратите перенаправление и обработайте ответ.

Как можно использовать jQuery Ajax, чтобы отправить следующую форму на form.php, не вызывая перенаправления страницы? Форма выглядит так:

html
<form name="foo" action="form.php" method="POST" id="foo">
    <label for="bar">A bar</label>
    <input id="bar" name="bar" type="text" value="" />
    <input type="submit" value="Send" />
</form>

Я хочу захватить все данные формы и отправить их через Ajax на form.php. Какой правильный код jQuery для этого?

Форму можно отправлять через Ajax, перехватывая обычное событие submit, сериализуя все поля и отправляя их через $.ajax.
В колбэке success можно показать ответ сервера или обновить UI — перезагрузки страницы не будет.


Содержание


Понимание отправки формы через Ajax

Когда форма отправляется обычным способом, браузер посылает запрос по URL из атрибута action и затем переходит на страницу‑ответ.
Чтобы этого не произошло, нужно:

  1. Перехватить событие submit и вызвать e.preventDefault(), чтобы браузер остановил стандартное действие.
  2. Собрать все данные формы в формате, который ожидает сервер. Метод serialize() jQuery превращает поля в URL‑кодированную строку (например, bar=hello).
  3. Отправить эти данные на целевой скрипт (form.php) через Ajax‑запрос ($.ajax, $.post или $.get).
  4. Обработать ответ асинхронно.

Реализация кода на jQuery

html
<!-- Ваша форма -->
<form name="foo" action="form.php" method="POST" id="foo">
    <label for="bar">A bar</label>
    <input id="bar" name="bar" type="text" value="" />
    <input type="submit" value="Send" />
</form>
js
// Убедимся, что DOM готов
$(function () {
    // Прикрепляем обработчик submit
    $('#foo').on('submit', function (e) {
        e.preventDefault();               // Останавливаем обычную отправку

        $.ajax({
            url: $(this).attr('action'),   // form.php
            type: $(this).attr('method'),  // POST
            data: $(this).serialize(),     // Все поля формы
            success: function (resp) {
                // Что‑то делаем с ответом (например, показываем сообщение)
                $('#foo').after('<p>Success: ' + resp + '</p>');
            },
            error: function (xhr, status, error) {
                // Обрабатываем ошибки
                $('#foo').after('<p>Error: ' + error + '</p>');
            }
        });
    });
});

Почему это работает

  • e.preventDefault() отменяет стандартную навигацию браузера.
  • $(this).serialize() собирает все элементы с атрибутом name в строку запроса.
  • Ajax‑запрос использует те же action и method, что и обычная форма, но остаётся на той же странице.
  • Колбэки success и error позволяют реагировать на ответ сервера без перезагрузки.

Вы можете заменить блок success любым обновлением UI: модальные окна, inline‑сообщения, или даже программно перенаправить, если понадобится.


Обработка ответа сервера

form.php может отдавать простой текст, JSON или любой другой формат.
Если вы возвращаете JSON, добавьте dataType: 'json' в параметры Ajax и работайте с разобранным объектом:

js
$.ajax({
    url: '/form.php',
    type: 'POST',
    data: $('#foo').serialize(),
    dataType: 'json',
    success: function (data) {
        // Пример: data.message содержит дружелюбное сообщение
        alert(data.message);
    }
});

Убедитесь, что PHP‑скрипт выводит правильный заголовок Content-Type, например:

php
header('Content-Type: application/json');
echo json_encode(['message' => 'Form received!']);

Распространённые ошибки и советы

Проблема Как исправить
Поля не отправляются Убедитесь, что каждое нужное поле имеет атрибут name.
CSRF‑токены Включите скрытые поля (например, _token) и сериализуйте их как обычно.
Большие загрузки файлов Используйте FormData и задайте processData: false, contentType: false.
Кросс‑доменные запросы На form.php должны быть правильные заголовки CORS.
Отладка Откройте вкладку Network в DevTools, проверьте полезную нагрузку запроса и ответ.

Источники

  1. Документация jQuery AJAX – $.ajax
  2. Метод serialize() jQuery
  3. MDN Web Docs – FormData для загрузки файлов
Авторы
Проверено модерацией
Модерация
Отправка формы через jQuery Ajax без перезагрузки страницы