2016-09-20 45 views
1

考虑下面的Compojure路由:总结PARAMS(cljs-AJAX +的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"} 

岗位参数通过compojure阅读并包装到params-map中。

然而,这并不由cljs-Ajax库发起一个Ajax请求工作:

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

它告诫 “{}”。当改变代码使用GET时,它可以工作。我猜这是由于浏览器将主体作为输入流而不是纯文本发送的原因。但我不确定,我不知道如何解决这个问题。

+0

也许你可以尝试在cljs-ajax调用中设置'{...:format:raw ...}'? – jsonmurphy

+0

你检查过使用cljs-ajax时,是否发送了'PUT'请求而不是'POST'?只是说。 – Marcs

回答

0

它看起来像cljs-ajax默认发送transit格式的请求和响应。 (见:format:response-format默认here)。你可以尝试在请求映射中指定一个显式的json响应 -

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