wrap-params(cljs-ajax + compojure)

时间:2016-09-20 06:18:23

标签: ajax clojure clojurescript compojure

考虑以下compojure路由:

(defroutes main-routes
  (POST "/something" r {:body (prn-str (:params r))}))

(def handler
  (-> main-routes
      (wrap-params)))

使用curl进行测试时,我得到了所需的结果:

curl -d "a=b" localhost:3000/something
{"a" "b"}

Post参数由compojure读取并包装到params-map。

但是这不适用于cljs-ajax库发起的ajax请求:

(POST "/something" {:handler #(js/alert %)
                    :params {"a" "b"}})

它会提醒“{}”。更改代码以使用GET时,它可以正常工作。我想这是因为浏览器将主体作为输入流发送而不是纯文本。但我不确定,我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

默认情况下,cljs-ajax似乎正在发送transit格式化的请求和响应。 (请参阅:format:response-format默认here)。您可以尝试在请求映射中指定显式的json响应 -

{:handler #(js/alert %)
 :params {"a" "b"}
 :response-format :json}