コンテンツにスキップ

055. hx-trigger Header(今回の通信を引き起こした「真犯人」をサーバーへ伝える)

原理:「誰が」ボタンを押したのかという特定

似たようなリクエストを区別する

同じフォームの中に、複数の送信ボタンがある場面を想像してください。 - ボタンA:「保存して閉じる」 - ボタンB:「保存して、次の入力を続ける」 これら二つのボタンは、どちらも同じURL(/api/save)へ、同じデータを送るかもしれません。

サーバーにデータが届いたとき、どちらのボタンが押されたのかを知ることができれば、サーバーは「次は画面を閉じるためのHTMLを返すか」「次の入力欄を空にするためのHTMLを返すか」を正しく選ぶことができます。

このように、「この通信を開始した特定の要素(IDや名前)」をサーバーへ知らせるためのヘッダーが hx-trigger です。


実践:発火元を特定して、レスポンスを劇的に変える

1. サーバー側での発火元チェック(疑似コード)

どのボタンが通信を起こしたかをヘッダーから読み取る例です。

// PHP の例
$trigger_id = $_SERVER['HTTP_HX_TRIGGER'];

if ($trigger_id === 'save-and-close') {
    // 閉じる処理用のHTML
    echo "<div>保存完了。画面を閉じます。</div>";
} else if ($trigger_id === 'save-and-continue') {
    // 次を促すHTML
    echo "<div>保存完了。次の入力をどうぞ。</div>";
}

2. IDが命

このヘッダーには、通信を引き起こした要素の 「id 属性」 の値が入ります。 もしその要素にIDが付いていない場合は、このヘッダーは送られないか、空になってしまいます。HTMXとサーバーの高度な連携を楽しむなら、重要なボタンにはこまめにIDを振っておくことが、鉄則のテクニックとなります。

3. ステップ・バイ・ステップ解説

  1. IDを振る: 通信を行う要素(ボタンなど)に、自分自身を識別できるユニークな id="..." を付けます。
  2. いつも通り通信: 他の属性(hx-post など)はいつも通り書くだけでOKです。HTMXが裏側で自動的にそのIDをヘッダーへ乗せてくれます。
  3. サーバーの分岐: サーバー側で hx-trigger という名前のヘッダーの中身を確認し、処理を分岐させます。

特徴:犯人の「名前」と「場所」

  • IDそのものが届く: ブラウザで定義した id="submit-btn" という文字列がそのまま届きます。
  • 要素名ではない: buttoninput といったタグ名ではなく、あなたが付けた「固有の名前(ID)」が優先されます。

まとめ:初心者のための「発火元」の意識

hx-trigger ヘッダーは、サーバーがあなたのサイトの「ボタン一つ一つ」を認識し、それぞれに最適な対応をするための「顔写真付きの身分証」のようなものです。

  • ボタンに「個性」を: IDを振ることは、単なるCSSのためだけでなく、サーバーとの深い対話(誰が押したか)のために非常に価値のある行為です。
  • 賢いサーバーサイド設計: URLをいくつも増やす代わりに、一つのURLに対して「誰が呼んだか」で挙動を変える、という効率的なコードが書けるようになります。
  • デバッグでも最強: 「意図しないタイミングで通信が発生している」時、ログの hx-trigger を見れば、どの不届きなボタンが発火したのかが一目瞭然です。

今回の出来事は、誰の手によって引き起こされたのか。hx-trigger を使って、発火元に寄り添った「痒い所に手が届く」レスポンスを実現してください。次の記事では、ID以外で自分の正体を明かす hx-trigger-name(056. hx-trigger-name)をご紹介します。