私はclojurescriptには新しく、以前に書かれたアプリケーションを純粋にclojurescriptで実装することで深いダイビングをしたいと思っていますが、ajax呼び出しを実装することに関しては紛失しています。誰かが私にオンラインの例を教えたり、コードスニペットか2つを私に教えてもらえますか?clojurescriptでajax呼び出しを実装する
答えて
2016年1月22日更新
それはまだ動作しますが、オリジナルの答えは、1つの以上の貢献者とClojureScriptソリューションの一般的な不足があった時からです。 XhrIoを直接活用するのではなく、下記のMikhail Dが示唆するように、cljs-ajaxの代わりに、機能が充実した、機能豊富なソリューションを使用してください。
わかりましたので、Clojurescriptは、Googleの閉鎖JavaScriptライブラリを活用することを考えると、閉鎖ドキュメントのクイック検索は、AJAXを生成するための適切な方法としてxhrIoをもたらしたコール:
Example using Closure's Asynchronous XMLHttpRequests with XhrIo
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content,
opt_headers, opt_timeoutInterval)
A 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を使用して同様の何かを行うことができます。詳細については、リンクを参照してください:
ホープ誰かがこの便利見つけました!
私のやり方は少し異なります。私はなぜマークが彼の答えで示唆した方法が私のために働かなかったのかわからない。うまくいけば、これも便利です。
xhr-connection
ラッパーではなく、goog.net.XhrIo
を直接使用しました。
(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
のマップは、キーワードではなく文字列でキーインされることに注意してください。構文が明確かつ単純に見えますが、ClojureScriptのために設計されていますので
アン別の実行可能な選択肢はhttps://github.com/JulianBirch/cljs-ajax
である可能性があります。また、多くの機能(例えば、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})
私は少し混乱している:なぜ '(.send XHRのURLのmyCallbackは)'動作しますか?私が 'xhr-connection'と言うことができるのは、新しい' goog.net.XhrIo'を返す関数だから、なぜ '.send'がそれに作用するのでしょうか? – Andrew
最後のドットはgoog.net.XhrIoです。これは 'new goog.net.XhrIo()'と同等です –