考虑以下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时,它可以正常工作。我想这是因为浏览器将主体作为输入流发送而不是纯文本。但我不确定,我不知道如何解决这个问题。
答案 0 :(得分:0)
默认情况下,cljs-ajax
似乎正在发送transit
格式化的请求和响应。 (请参阅:format
和:response-format
默认here)。您可以尝试在请求映射中指定显式的json响应 -
{:handler #(js/alert %)
:params {"a" "b"}
:response-format :json}