clojurescriptでのajax呼び出しの実装

私はclojurescriptには新しく、clojurescriptで純粋に以前に書かれたアプリケーションを実装することで深いダイビングをしたいと思っていますが、ajax呼び出しを実装することに関しては犠牲になっています。誰かが私にオンラインの例を教えたり、コードスニペットか2つを私に教えてもらえますか?

17

3 答え

2016年1月22日の更新

それでも動作しますが、最初の回答は、1人以上の貢献者を持つClojureScriptソリューションが一般的にない時からのものです。 XhrIoを直接活用するのではなく、よく維持管理された機能豊富なソリューションを使用することを検討してください。代わりに、 cljs- ajax 、下記のMikhail Dが提案したように!


さて、ClojurescriptがGoogleのClosure JavaScriptライブラリを活用していることを考えると、Closure Documentationを簡単に検索すると、xhrIoがAJAX呼び出しを生成するための適切なメソッドとなりました。

Closureの非同期XMLHttpRequestsとXhrIoの使用例

goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content,
     opt_headers, opt_timeoutInterval)

Clojurescriptソースのクイックレビューでは、次の機能が明らかになりました。

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を使用して同様のことを行うことができます。詳細はリンクを参照してください:

JSONP Closure API

誰かがこれが助けになることを願っています!

16
追加された
私はちょっと混乱しています:(.xhr url myCallbackを送信してください)はなぜ機能しますか?私が知る限り、 xhr-connection は新しい goog.net.XhrIo を返す関数なので、 .send はそれ?
追加された 著者 Andrew,
goog.net.XhrIoの末尾のドット。 new goog.net.XhrIo()と同等にします
追加された 著者 Justin Abrahms,

An another viable option could be 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})
13
追加された

私がやったやり方は少し異なります。私はなぜマークが彼の答えで示唆した方法が私のために働かなかったのかわからない。うまくいけば、これも便利です。

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 を呼び出すのではなく、 .- target を使用してJSONオブジェクトのプロパティを取得したことです。

JSONオブジェクトから作成された v のマップは、キーワードではなく文字列でキーイングされることに注意してください。

6
追加された
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript