Отправить данные без перезагрузки

У меня есть форма и функция php, в одном файле. Как сделать так, чтобы при отправке данных страница не перезагружалась.

<form method="post" class="require_form" action="#">
                <input type="text" name="theme_id" hidden="true" value="'.$row['id'].'"/>
                <button type="submit" name="upp" class="open_modal btn btn-secondary save">REQUIRE</button>
            </form>


function showRequire($id)
{
    global $conn, $requirements;
    $sql = "SELECT * FROM `requirements` WHERE `id_projects`='$id';";
    $result = $conn->query($sql);
    if ($result->num_rows>0) {
        $rez= $result->fetch_assoc();
        $requirements=$rez['requirements'];
    } else {
        $requirements="Нет требований к данному проекту";
    }

    echo "<script type='text/javascript'>
        $(document).ready(function(){
        $('#exampleModalCenter').modal('show');
        });
        </script>";

}

Ответы (1 шт):

Автор решения: Zerxa

Средствами PHP - никак. Вы можете реализовать это через AJAX.

Пример на ванильном JS.

<form method='post'>
    <input type='text' id='ajax-require'>
    <button type='button' id='send'> Отправка текстового поля AJAX запросом </button>
</form>

И сам JS код, который будет отправлять Ajax запрос:

<script>
//после загрузки DOM-дерева страницы
document.addEventListener("DOMContentLoaded",function() {
  //получить кнопку
  var mybutton = document.getElementById('send');
  //подписаться на событие click по кнопке и назначить обработчик, который будет выполнять действия, указанные в безымянной функции
  mybutton.addEventListener("click", function(){
    //1. Сбор данных, необходимых для выполнения запроса на сервере
    var name = document.getElementById('ajax-require').value;
    // 2. Создание переменной request
    var request = new XMLHttpRequest();
    // 3. Настройка запроса
    request.open('POST','/api/ajax',true);
    // 4. Подписка на событие onreadystatechange и обработка его с помощью анонимной функции
    request.addEventListener('readystatechange', function() {
      //если запрос пришёл и статус запроса 200 (OK)
      if ((request.readyState==4) && (request.status==200)) {
        // например, выведем объект XHR в консоль браузера
        console.log(request);
        // и ответ (текст), пришедший с сервера в окне alert
        console.log(request.responseText);
        // получить элемент c id = welcome
        var welcome = document.getElementById('welcome');
        // заменить содержимое элемента ответом, пришедшим с сервера
        welcome.innerHTML = request.responseText;
      }
    });
    // Устанавливаем заголовок Content-Type(обязательно для метода POST). Он предназначен для указания кодировки, с помощью которой зашифрован запрос. Это необходимо для того, чтобы сервер знал как его раскодировать.
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    // 5. Отправка запроса на сервер. В качестве параметра указываем данные, которые необходимо передать (необходимо для POST)
    request.send(name);
  });
});
</script>

Там где:

// 3. Настройка запроса
    request.open('POST','/api/ajax',true);

необходимо указать свои параметры, метод отправки запроса (POST, GET, PUT) и ссылка на обработчик.

→ Ссылка