Clojure - ajax.core POST

问题描述 投票:1回答:2

我在使用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]

clojure clojurescript
2个回答
0
投票

这里没有足够的信息来帮助您完全调试,但我怀疑您需要将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


0
投票

用这段代码发生在我身上:

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

即使在添加其他选项之后,一切都开始运作良好。我知道,很奇怪。

© www.soinside.com 2019 - 2024. All rights reserved.