2

Clojurescript でフォームをシリアライズする

Clojurescript を介してシンプルで小さなフォームを送信しています (Clojure/Luminus サーバーによって受信されます)。送信ボタンを使用してフォームを送信すると、応答に次のようなセクションが含まれていることがわかります。

:form-params {__anti-forgery-token TDsE55j9y7d1dT2eWOGnmECMnnNXWo5tIDVzENc9lr1aiJSqOKIVmmmq/XmaC2M6GHN086+VeROwi7up, app-type professorial}

しかし、CLJS-Ajax で投稿すると、次のように表示されます。

; ...
:body #object[java.io.ByteArrayInputStream 0x23bbfd9d java.io.ByteArrayInputStream@23bbfd9d]
:form-params {}
; ...

したがって、フォームがサーバーに到達すると、フォームは ByteArrayInputStream に入れられているようです。ajax/clojurescript コードは次のようになります。

(defn submit-update-form []
  (let [form (.getElementById js/document "userform")
        url "/update-user"
        csrf-token (.-value (.getElementById js/document "token"))]
    (.log js/console form)
    (POST url {:handler #(js/alert "Submission!")
               :content-type "application/x-www-form-urlencoded"
               :body form
               :headers {:x-csrf-token csrf-token}})
    ;(.submit form)
    false))

明らかに、シリアル化されたフォームのコンテンツを投稿の :form-params に入れる必要があります。これはどのように行うことができますか?

これを起動して実行しようとするハンドラー コードは非常に単純です。

(POST "/update-user" req
    (println req))
4

1 に答える 1