16 подписчиков
Хочу поделиться с вами одним решением, которое сам довольно долго искал. История такая – в моем приложении есть немного JavaScript кода, который формирует таблицу в HTML. Это мне понадобилось так как изначально не известен размер таблицы, а именно сколько будет строк в таблице при ее формировании, при этом не хочется, чтобы были пустые строки. В таблице есть текст, который должен быть оформлен ссылкой (кнопка «Добавить») – вот тут и «подкралась» сложность, сделать текст ссылкой не сложно, а вот отправить данные уже сложнее, т.к. во-первых нужно генерировать POST запрос с данными (уже давал ссылку на прекрасную статью про HTTP-запросы https://dzen.ru/media/cod_cat/prekrasno-oformlennaia-i-podrobnaia-statia-pro-httpzaprosy-pri-etom-ne-658c3bf720643e4bfa0ffa1b), а во-вторых запрос должен содержать CSRF Token, чтобы Java контроллер принимал запрос и не выдавал ошибку «403 Forbidden».
Поскольку с JavaScript я совсем незнаком, то решение для меня стало настоящим вызовом! Вот решение, которое у меня получилось:
Для «первого пункта» - оказывается для того, чтобы отправить POST-запрос по ссылке в JavaScript, нужно воспользоваться функцией fetch. Она также позволяет добавлять заголовки к запросу (здесь же решение «второго пункта»), которые определяют, как сервер должен обработать запрос. Например, вы можете указать заголовок Content-Type, чтобы определить тип данных, которые вы отправляете на сервер, или X-CSRF-Token, который нужно приложить к запросу, если ваше приложение использует данный вид защиты. В итоге решение выглядит так:
// Создаем csrfToken для передачи на сервер
var csrfToken = document.querySelector('input[name="_csrf"]').value;
var data = {
// Создаем данные для отправки на контроллер
};
// Отправляем данные на сервер
fetch("/ваша/ссылка", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-Token': csrfToken // Добавляем CSRF токен в заголовок запроса
// Здесь могут быть другие заголовки, если необходимо
},
body: JSON.stringify(data)
})
Вероятно для JS разработчиков данные сложности вызовут улыбку, но для Java разработчика это действительно получился вызов)))
1 минута
6 марта 2024