我是clojurescript的新手,希望通過純粹在clojurescript中實現一個先前編寫的應用程序來做更深入的探索,但是爲了實現ajax調用而不知所措。任何人都可以在網上給我一個例子,或給我提供一兩個代碼片段嗎?在clojurescript中實現ajax調用
17
A
回答
16
2016年1月22日更新
雖然它仍然有效,原來答案就是從那時候還普遍缺乏ClojureScript解決方案的超過1個貢獻者。絕對不要直接利用XhrIo,而應該考慮使用維護良好,功能豐富的解決方案,而不是像下面的Mikhail D所建議的那樣對其進行包裝:cljs-ajax!
好了,因爲Clojurescript利用谷歌的關閉JavaScript庫,快速搜索的封閉文檔的產生xhrIo的適當方法產生AJAX調用:
Example using Closure's Asynchronous XMLHttpRequests with XhrIo
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content,
opt_headers, opt_timeoutInterval)
一快速審查的Clojurescript源頭揭示了以下功能:
From src/cljs/clojure/browser/net.cljs in clojure/clojurescript
(defn xhr-connection
"Returns an XhrIo connection"
[]
(goog.net.XhrIo.))
所以沿着這個線的東西應該有預期的結果:
(def xhr xhr-connection)
(defn myCallback [replyValue]
... Do Something with replyValue
... for example: (someJsonFunc (.getResponseJson (.target replyValue))))
(defn ajax-json [url]
(.send xhr url myCallback))
對於JSONP,你可以做類似的使用goog.net.Jsonp東西。看到該鏈接的詳細信息:
希望有人認爲這很有幫助!
6
我這樣做的方式稍有不同。我不知道爲什麼馬克在他的回答中建議的方式對我沒有用。希望這也是有用的。
我直接使用goog.net.XhrIo
,而不是xhr-connection
包裝。
(defn callback [reply]
(let [v (js->clj (.getResponseJson (.-target reply)))] ;v is a Clojure data structure
(your-function-here v)))
(.send goog.net.XhrIo url callback)
,我可以看到的主要區別是,我用.-target
獲得JSON對象的屬性,而不是調用target
。
值得注意的是,已經從JSON對象創建的v
中的地圖以字符串而不是關鍵字爲關鍵字。
13
的另一種可行的選擇可能是https://github.com/JulianBirch/cljs-ajax
,因爲它是專爲ClojureScript,語法看起來更清晰,更簡單。它還支持很多開箱即用的功能(例如:transit
,edn
和json
格式)。
從README一些例子:
(ns foo
(:require [ajax.core :refer [GET POST]]))
...
(GET "/hello" {:handler handler
:error-handler error-handler})
(POST "/send-message"
{:params {:message "Hello World"
:user "Bob"}
:handler handler
:error-handler error-handler})
相關問題
- 1. 原子在Clojurescript中如何實現?
- 2. ClojureScript的設計和實現
- 3. 爲REST API實現Ajax調用
- 4. 爲Ajax調用實現安全
- 5. XWiki實現REST Ajax調用錯誤
- 6. jquery ajax調用「後退按鈕」實現
- 7. 在clojurescript中編寫clojurescript REPL
- 8. 在wordpress中實現jquery ajax?
- 9. 在php中實現Ajax MVC
- 10. Clojure中可以使用ClojureScript的core.async實現嗎?
- 11. 如何使用deftype來實現Clojurescript中的關聯結構
- 12. 在Ajax調用中實現響應標頭
- 13. 在Clojurescript中如何實現(相同?a b)?
- 14. 如何實際使用ClojureScript?
- 15. 在CakePHP中使用AJAX實現拖放
- 16. 調用從clojurescript的JavaScript(canvasjs)
- 17. ClojureScript和HTML實體
- 18. Clojurescript連載形式AJAX POST
- 19. 如何在使用ajax調用時實現next/back函數?
- 20. 如何調試ClojureScript
- 21. 使用Kurento在Nodejs中實現羣組調用實現
- 22. 與jqtouch實現ajax加載微調器
- 23. 在Clojurescript中使用「extern」s
- 24. 在Clojurescript中使用 - ?>
- 25. 在opa中實現回調
- 26. 在Qt中實現回調
- 27. 如何在ZF上通過Ajax調用實現「Deep Link」?
- 28. SugarCRM在自定義模塊字段上實現AJAX調用
- 29. 如何在AJAX請求中實現jQuery微調圖像
- 30. 如何在primefaces中實現回調ajax請求?
我有點困惑:爲什麼'(XHR。發送URL myCallBack函數)'工作?據我可以告訴'xhr-connection'是一個返回一個新的'goog.net.XhrIo'的函數,那麼爲什麼'.send'在它上面工作呢? – Andrew 2012-04-14 15:47:14
goog.net.XhrIo上的尾部點。使其相當於'new goog.net.XhrIo()' – 2013-05-31 21:17:01