勉強日記

チラ裏

1つのform要素でGET/POSTのsubmitを共存


TL;DR

経緯

  • 「条件を入力して帳票出力する」系の機能で、同一form内に複数のsubmitを共存させたくなった
    • HTMLプレビュー
      • ブクマしたいのでGET /preview?検索条件
    • CSVダウンロード
      • ブクマする必要はなく、慣例的にも POST /download
  • POSTが絡むのでCSRFトークン必須
  • 何も考えずに実装すると、GETリクエストにもCSRFトークンが乗ってしまう

やったこと

 $(function () {
     // GETリクエスト時はCSRFトークン除去
     $('[formaction]').on('click', function (event) {
         if (event.target.getAttribute('formmethod') === 'get') {
             $('[name=_token]').remove()
         }
     });
 });

考えうる別解

所感

  • emacsのeww(テキストブラウザ)をけっこう利用している民としては、これくらいJSに頼らずHTMLだけで完結できてほしいものである
    • HTML5でformmethod属性を策定するときに気づかなかったのかなあ