hx-get — HTMX

hx-get mengirim GET request saat elemen di-trigger. Dasar Load Data Secara default, response HTML akan menggantikan innerHTML dari elemen yang men-trigger…

hx-get="alamat" membuat sebuah elemen mengirim request GET ke alamat itu saat pemicunya terjadi. GET artinya meminta data, gak mengubah apa pun di server. Balasan HTML-nya ditaruh di dalam elemen itu sendiri, kecuali hx-target menunjuk tempat lain. Bayangin kamu bertanya ke Bu Rini di meja laundry: "Cucian #12 sudah sampai mana?" Kalau kamu gak menunjuk papan, dia menulis jawabannya di kertas yang kamu sodorkan, yaitu kertas pertanyaanmu sendiri. Kalau kamu menunjuk kotak status #12 di papan, jawabannya ditulis di sana.

🧪 Tebakan cepat: Tombol ini gak punya hx-target: <button hx-get="/order/12/status">Cek status</button>. Server membalas Disetrika. Setelah diklik, kata itu muncul di mana? Jawabannya ada di bagian "Tanpa hx-target, balasannya masuk ke elemen itu sendiri".

Kapan request-nya dikirim: pemicu bawaan

Pemicu (trigger) adalah event yang membuat htmx mengirim request. Event itu kejadian di halaman, misalnya klik atau isi kotak yang berubah. Tiap elemen punya pemicu bawaan:

Elemen Pemicu bawaan Kapan
<input>, <select>, <textarea> change nilainya berubah, lalu kamu menekan Enter atau pindah ke kotak lain
<form> submit form dikirim
elemen lain: <button>, <a>, <div>, ... click diklik

Jadi <button hx-get="..."> jalan saat diklik, tanpa atribut tambahan.

Tanpa hx-target, balasannya masuk ke elemen itu sendiri

<!-- sebelum diklik -->
<button hx-get="/order/12/status">Cek status</button>

<!-- server membalas: Disetrika -->

<!-- sesudah diklik -->
<button hx-get="/order/12/status">Disetrika</button>

Tulisan "Cek status" hilang, diganti "Disetrika", di dalam tombolnya sendiri. Itu jawaban tebakannya. htmx mengganti innerHTML, yaitu isi di antara tag pembuka dan penutup, milik elemen yang memicu request. Tombolnya masih ada, tapi labelnya rusak.

Dengan hx-target, balasannya ke tempat yang kamu tunjuk

Ini order #12 di papan Laundry Bu Rini, sekarang dengan tujuan yang jelas:

<li id="order-12">
  #12 Pak Darto, 3 kg: <span id="status-12">Dicuci</span>
  <button id="cek-12" hx-get="/order/12/status" hx-target="#status-12">
    Cek status
  </button>
</li>

Memuat sendiri saat halaman dibuka

Papan Bu Rini punya kotak ringkasan yang harus terisi tanpa diklik siapa pun:

<div id="ringkasan" hx-get="/ringkasan" hx-trigger="load" hx-target="this">
  Memuat ringkasan...
</div>

Yang dikirim ke server

Klik Cek status di atas mengirim request ini:

GET /order/12/status
HX-Request: true
HX-Trigger: cek-12
HX-Target: status-12
HX-Current-URL: http://localhost:8000/papan

⚠️ Jebakan yang sering ketemu

TL;DR: hx-get="/order/12/status" mengirim request GET saat pemicu bawaan elemennya terjadi: click untuk tombol, div, dan elemen lain, change untuk input, select, dan textarea, submit untuk form. Tanpa hx-target, balasannya mengganti isi elemen itu sendiri, jadi tulis hx-target="#status-12" untuk menunjuk tempat lain. hx-trigger="load" membuat elemen memuat sendiri saat halaman dibuka, dan hx-target="this" menunjuk elemen itu sendiri. GET membawa nilai di URL (/cari?cari=darto) dan header HX-Request: true. Server membalas potongan HTML, bukan halaman utuh.

Yang akan kamu pelajari