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))