我在使用ajax的POST方面遇到了一些麻烦。
我想将用户添加到我的数据库,所以我使用POST,我要发送的数据是{:id id :pass pass}
这是我的POST
(defn add-user! [user]
(POST "/add-user!"
{:params user}))
我想要做的就是将上面指定的表单中的信息输入到此POST中,以便将其发送到数据库。我知道POST的参数是正确的形式,对数据库和我的路由的查询是正确的但是我在POST时犯了错误,我无法弄清楚我的错误。
我叫add-user!
(defonce fields (atom {}))
(defn add-user! [user]
(POST "/add-user!"
{:params user}))
(defn content
[]
[:div
[:div
[:p "Enter Name:"
[:input
{:type :text
:name :name
:on-change #(swap! fields assoc :id (-> % .-target .-value))
:value (:id @fields)}]]
[:p "Enter Pass:"
[:input
{:type :text
:name :pass
:on-change #(swap! fields assoc :pass (-> % .-target .-value))
:value (:pass @fields)}]]
[:input
{:type :submit
:on-click #(do
(add-user! @fields))
:value "Enter"}]]
[:div
[:p "Id is " (:id @fields)]
[:p "Pass is " (:pass @fields)]]])
我对clj文件中数据库的查询是
(defn add-user! [user]
(sql/insert! db :users user))
其中sql是[clojure.java.jdbc :as sql]
这里没有足够的信息来帮助您完全调试,但我怀疑您需要将POST
修改为:
(defn add-user! [user]
(POST "/add-user!"
{:format :json
:params user}))
如果你不提供:format
,cljs-ajax默认发送Transit数据,这肯定会混淆服务器期待JSON。
:format
- 指定请求正文的格式(Transit,JSON等)。还设置适当的Content-Type标头。如果没有提供,则默认为:transit
。 - JulianBirch/cljs-ajax#getpostput
用这段代码发生在我身上:
(POST "/admin/tests/load"
{:params {:test-id "83"}
:headers {"x-csrf-token" csrf-field}
:handler (fn [r] (do (.log js/console r) (swap! test-state r)))
:format :json
:response-format :json
:error-handler (fn [r] (prn r))})))
“params”总是出现空“{}”。然后我尝试了:
(POST "/admin/tests/load"
{:params {:test-id "83"}
:headers {"x-csrf-token" csrf-field}} )
即使在添加其他选项之后,一切都开始运作良好。我知道,很奇怪。