htmx, redirect after request
On a site using htmx I had the need of redirecting to the homepage (/
) after I did a network DELETE
request to the server.
A first implementation I did involved client-side redirect by listening to the htmx:afterRequest
event.
The event happened after clicking a button with id button-delete-project
, so I used this code:
<script>
document.addEventListener('htmx:afterRequest',
function (event) {
if ((event as CustomEvent).detail.target.id ===
'button-delete-project') {
window.location.href = '/'
}
})
</script>
An alternative approach, the one I decided to go for, involved setting a custom htmx header in the server response.
After deleting an item, I set the HX-Redirect
HTTP header to /
.
Using an Astro route, I used this code:
if (Astro.request.method === 'DELETE') {
await deleteProject(id)
return new Response(null, {
status: 204,
statusText: 'No Content',
headers: {
'HX-Redirect': '/',
},
})
}
After doing the HTTP request, htmx automatically redirects to that URL, client-side.
You can set a wide variety of custom headers in the response, to do many interesting things like this one, for which you might think you’d have to write custom code, but it’s all built-in for you.
I wrote 21 books to help you become a better developer:
- HTML Handbook
- Next.js Pages Router Handbook
- Alpine.js Handbook
- HTMX Handbook
- TypeScript Handbook
- React Handbook
- SQL Handbook
- Git Cheat Sheet
- Laravel Handbook
- Express Handbook
- Swift Handbook
- Go Handbook
- PHP Handbook
- Python Handbook
- Linux Commands Handbook
- C Handbook
- JavaScript Handbook
- Svelte Handbook
- CSS Handbook
- Node.js Handbook
- Vue Handbook
Also, JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025