首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用试剂完成ajax请求?

如何用试剂完成ajax请求?
EN

Stack Overflow用户
提问于 2016-06-09 17:55:53
回答 1查看 5.8K关注 0票数 12

假设我有一个组件,它需要在呈现之前从服务器请求一些数据。

我现在拥有的是类似于cljs-ajax库的东西:

代码语言:javascript
复制
(def data (r/atom nil)) 

(defn component [id]
  (r/create-class {:reagent-render simple-div
                   :component-did-mount (partial get-data id)}))

(defn get-data [id]
  (GET (str "/api/" id)
     {:handler init}))

(defn init [response]
  (let [data1 (:body response)
        data2 (compute data1)
        data3 (compute2 data2)]
    (reset! data (compute3 data1))
    (.setup @data data1)
    (.setup2 @data data2)
    (.setup3 @data data3))

setup函数是国外一些具有副作用的JS库函数。

这是可行的,但我觉得这不是做回调的正确方法。更不用说,如果我需要基于我得到的第一个数据,然后是基于第一个数据的其他数据,那么这将是一个非常糟糕的回调链。

有没有一种更好、更干净的方法在试剂/文本中完成这种ajax请求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-12 03:10:29

最常见的提出请求的方法是cljs。将[cljs-http "0.1.39"]添加到project.clj中的依赖项中,并在终端中重新启动配置进程以获取新的依赖项。

代码语言:javascript
复制
(ns my.app     
  (:require
    [cljs.core.async :refer [<!]] [cljs-http.client :as http])
  (:require-macros [cljs.core.async.macros :refer [go]])

(go (let [response (<! (http/get "data.edn"))]
  (prn (:status response))
  (prn (:body response))))

Cljs是管理HTTP请求的一种很好的方法。它使用core.async通道来传递其结果。现在,您需要关注的是http/get和http/post调用应该发生在go表单中,其结果是一个可以将其结果读取到

依赖的http gets可以在一个类似顺序代码但异步发生的go块中以合理的方式链接在一起。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37733045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档