【发布时间】:2014-05-29 23:58:35
【问题描述】:
我有一个带有地图矢量的原子,它描述了我的起始消息,就像这样......
(def messages
(atom
[{:message "Hello world"
:user "Foo"}
{:message "Ajax is fun"
:user "Bar"}]))
我的路线是这样设置的......
(defroutes home-routes
(GET "/messages" [] (response/edn @messages))
(POST "/add-message" [message user]
(response/edn
(swap! messages conj {:message message :user user}))))
在我的 clojurescript 文件中,我有这个...
(defn render-message [{:keys [message user]}]
[:li [:p {:id user} message " - " user]])
(defn render-messages [messages]
(let [messages-div (domina/by-id "messages")]
(destroy-children! messages-div)
(->> messages
(map render-message)
(into [:ul])
template/node
(append! messages-div))))
(defn by-id [id]
(.getElementById js/document id))
(defn add-message []
(POST "/add-message"
{:format :edn
:params {:message (value (by-id "message"))
:user (value (by-id "user"))}
:handler render-messages
}))
(defn ^:export run []
(GET "/messages" {:handler render-messages})
(listen! (by-id "send")
:click add-message)
)
还有html...
<html>
<head></head>
<body>
<div id="messages"></div>
<textarea id="message"></textarea>
<br/>
<input type="text" id="user"></input>
<br/>
<button id="send">add message</button>
<script type="text/javascript" src="hello.js"></script>
<script type="text/javascript">
cfi_webservice.home.run();
</script>
</body>
</html>
渲染消息函数用于将新输入附加到 div 中,所以我的问题是当我单击带有发送 id 的按钮时,新 li 被添加到 ul 但参数为空......它总是 nil。我猜我的添加消息功能不正常,因为两个参数都没有发送到 /add-message 路由。有人可以帮助解决这个问题吗?
【问题讨论】:
-
您是否检查过您的服务器代码是否有效,例如
curl -X POST? -
是的,它正在工作,GET 正在打印来自 atom 的消息,并且 post 也在工作......但是当我点击按钮发送它们时,我似乎没有得到任何参数。
标签: ajax clojure clojurescript