Я новичок в clojurescript и хотел бы сделать более глубокое погружение, выполнив ранее написанное приложение только в clojurescript, но я не в состоянии выполнить вызов ajax. Может ли кто-нибудь указать мне пример онлайн или предоставить мне фрагмент кода или два?Реализация вызова ajax в clojurescript
ответ
22 января 2016 обновление
Хотя он все еще работает, оригинальный ответ от времени, когда был общий недостаток решений ClojureScript с более чем 1 вкладчика. Вместо того, чтобы напрямую использовать XhrIo, обязательно подумайте об использовании хорошо сохранившегося многофункционального решения, которое обертывает его вместо cljs-ajax, как это предложил Михаил D ниже!
Хорошо, Поэтому, учитывая, что Clojurescript использует библиотеку Closure JavaScript Google, быстрый поиск Замыкание документации дали 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. Смотрите ссылку для подробностей:
Надежда кто-то считает, что это полезно!
То, как я это делал, несколько отличается. Я не знаю, почему Маркус, предложенный в его ответе, не работал для меня. Надеюсь, это тоже полезно.
Я использовал 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
.
Стоит отметить, что карты в v
, созданные из объектов JSON, управляются строками, а не ключевыми словами.
другой жизнеспособный вариант может быть 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 Ajax Output
- 3. Типичная реализация асинхронного вызова ajax и обработки обратного вызова
- 4. clearInterval внутри обратного вызова в ClojureScript
- 5. Clojurescript сериализации формы AJAX POST
- 6. ClojureScript, JavaScript, AJAX Calls, Continuation Passing Style
- 7. Написание clojurescript REPL в clojurescript
- 8. PHP реализация JQuery Ajax
- 9. Реализация AJAX в Sharepoint
- 10. реализация Ajax в SharePoint
- 11. Может ли реализация ClojureScript использовать core.async в Clojure?
- 12. ClojureScript AJAX POST для отправки json-данных
- 13. Реализация рекурсивного вызова ajax и его остановка при одном условии
- 14. Полиморфная реализация обратного вызова
- 15. Реализация функции функции вызова
- 16. Javascript реализация обратного вызова
- 17. Можете назвать munging, чтобы избежать interop-вызова в ClojureScript?
- 18. У кого-нибудь есть реализация случая для clojurescript?
- 19. Реализация JCrop в ajax upload
- 20. Основная реализация ajax в magento
- 21. Реализация Ajax вызывает API REST
- 22. Реализация Ajax с Django
- 23. Кратные Ответный ад (в ClojureScript)
- 24. ASP.Net - реализация AJAX
- 25. Реализация Ajax/JQuery
- 26. Реализация системного вызова Linux 'socketcall'
- 27. Реализация вызова VoIP для VoIP
- 28. FancyBox - Реализация afterClose обратного вызова
- 29. Реализация вызова функции Pre/Post
- 30. Реализация обратного вызова для DialogFragment
Я немного запутался: почему '(XHR Пошлите URL myCallback)' работает? Насколько я могу судить, 'xhr-connection' - это функция, которая возвращает новый' goog.net.XhrIo', поэтому почему '.send' работает над этим? – Andrew
конечная точка на goog.net.XhrIo. делает его эквивалентным 'new goog.net.XhrIo()' –