Skip to content

Instantly share code, notes, and snippets.

@minimal
Last active December 22, 2015 01:48
Show Gist options
  • Save minimal/6398784 to your computer and use it in GitHub Desktop.
Save minimal/6398784 to your computer and use it in GitHub Desktop.
(ns demo-interface.xhr-util
(:require [cljs.core.async :as async :refer [<! >! chan close! timeout put!]]
[goog.net.XhrIo :as xhr]
[goog.structs :as structs]
[goog.Uri.QueryData :as QueryData]))
;; goog xhr helpers
(defn xhr-event-to-edn
"Extract useful info from a response, return a map"
[event]
(let [xhr (.-target event)]
{:status (.getStatus xhr)
:success? (.isSuccess xhr)
:response-text (.getResponseText xhr)
:error (.getLastError xhr)}))
(defn send-xhr
"Send xhr with the right args. Returns a channel"
([url]
(send-xhr url "GET" nil))
([url method]
(send-xhr url method nil))
([url method data]
(let [ch (chan 1)]
(xhr/send
url
(fn [event]
(put! ch (xhr-event-to-edn event))
(close! ch))
method
data)
ch)))
(defn GET [url]
(send-xhr url))
(defn POST [url data]
(send-xhr url "POST" (QueryData/createFromMap (structs/Map. (clj->js data)))))
(defn PUT [url data]
(send-xhr url "PUT" (QueryData/createFromMap (structs/Map. (clj->js data)))))
(defn DELETE [url]
(send-xhr url "DELETE"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment