Библиотека HTMX предоставляет удобные механизмы для работы с
динамическими веб-страницами, сокращая необходимость использования
JavaScript для обработки запросов. Один из ключевых аспектов работы с
HTMX — это передача параметров на сервер при выполнении HTTP-запросов. В
этой главе рассматривается, как правильно использовать атрибут
hx-vals для передачи параметров.
hx-vals?Атрибут hx-vals позволяет передавать параметры в
HTTP-запрос, который отправляется серверу, без необходимости добавлять
их в URL или использовать JavaScript для ручной настройки тела запроса.
Параметры, указанные через hx-vals, могут быть переданы как
часть данных, отправляемых при выполнении запроса, что делает
взаимодействие с сервером более гибким и удобным.
Атрибут hx-vals принимает объект в формате JSON. Этот
объект будет сериализован в строку и отправлен серверу при выполнении
запроса. Пример использования:
<button hx-get="/update" hx-vals='{"userId": 123, "action": "save"}'>
Сохранить
</button>
В этом примере при клике на кнопку будет выполнен GET-запрос по
адресу /update. Параметры userId и
action будут переданы на сервер в теле запроса как часть
данных.
Передача параметров через hx-vals работает следующим
образом:
hx-vals, он сериализует его в
строку JSON.hx-get данные могут быть
переданы в URL как параметры, а для hx-post — в теле
запроса).Используя POST-запрос, данные из hx-vals передаются в
теле запроса. В примере ниже при клике на кнопку выполняется запрос с
передачей данных в формате JSON:
<form hx-post="/submit" hx-vals='{"formId": "contactForm", "csrfToken": "abc123"}'>
<input type="text" name="name" />
<input type="email" name="email" />
<button type="submit">Отправить</button>
</form>
Когда форма отправляется, HTMX добавляет данные из
hx-vals в тело запроса. На сервере можно обработать данные
формы вместе с переданными параметрами.
Параметры в hx-vals могут быть динамически изменены с
помощью JavaScript. Например, можно обновить значения параметров перед
отправкой запроса. Это делается через изменение атрибута
hx-vals с использованием Jav * aScript:
<button hx-get="/update" id="updateButton" hx-vals='{"userId": 123}'>
Обновить
</button>
<script>
document.getElementById('updateButton').addEventListener('click', function() {
this.setAttribute('hx-vals', '{"userId": 456, "action": "delete"}');
});
</script>
В данном примере при клике на кнопку происходит изменение значений, которые передаются на сервер. Это позволяет динамически адаптировать параметры запроса в зависимости от ситуации.
Когда hx-vals используется в форме, передача параметров
может быть дополнена значениями, полученными от самих элементов формы.
Например, можно передать данные формы в теле запроса с дополнительными
параметрами, указанными в hx-vals:
<form hx-post="/submit" hx-vals='{"userId": 123}'>
<input type="text" name="name" />
<input type="email" name="email" />
<button type="submit">Отправить</button>
</form>
При отправке формы данные с полей формы будут автоматически добавлены
к запросу, а параметры из hx-vals — переданы как
дополнительные значения. Это особенно полезно для ситуаций, когда
необходимо отправить форму с предустановленными параметрами, не изменяя
структуру самой формы.
hx-vals можно использовать в сочетании с другими
аттрибутами HTMX, такими как hx-target,
hx-swap и другими. Это даёт возможность более гибко
настраивать взаимодействие с сервером и изменять части страницы,
основываясь на данных, переданных через запрос. Пример использования с
атрибутом hx-target:
<button hx-get="/update" hx-vals='{"userId": 123}' hx-target="#response">
Получить ответ
</button>
<div id="response"></div>
В данном примере запрос, который отправляется при клике на кнопку,
использует параметры из hx-vals и обновляет содержимое
элемента с ID response на основе ответа от сервера.
Параметры, передаваемые через hx-vals, могут быть
получены не только статически, но и динамически. Например, можно
передать значения, которые зависят от содержимого других элементов на
странице:
<input type="text" id="username" value="john_doe">
<button hx-get="/update" hx-vals='{"user": document.getElementById("username").value}'>
Обновить
</button>
Здесь значение, введенное пользователем в поле с ID
username, передается как параметр user при
выполнении запроса.
hx-valshx-vals избавляет от необходимости использовать JavaScript
для ручного создания и отправки запросов.Использование hx-vals делает код более читаемым и
гибким, значительно упрощая взаимодействие с сервером и настройку
запросов в HTMX.