gpt4 book ai didi

ajax - 如何处理 cljs-ajax 响应?

转载 作者:行者123 更新时间:2023-12-02 04:12:19 24 4
gpt4 key购买 nike

我正在使用 cljs-ajax 从 clojurescript 前端向一个使用 JSON 响应的 API 发出请求,但似乎我需要对其执行一些操作,然后才能在 cljs 中使用它。

(defn all-pieces []
(GET "/art/pieces" {:handler ajax-success-handler}))

当我初始化应用程序状态时,我分配 key :all-pieces (all-pieces)

当我在组件中迭代 :all-pieces 时,出现错误 Uncaught Error: [object Object] is not ISeqable

(defn pieces-component []
[:ul (for [piece (:all-pieces @app-state)]
[:li (art-piece piece)])])

编辑普拉特利:

下面的代码现在导致 all-pieces 的状态为 {},看出什么问题了吗?

;; -------------------------
;; Remote Data

(defn all-pieces [handler]
(GET "/art/pieces" {:handler handler}))

;; -------------------------
;; State Management

(def app-state (atom
{:doc {}
:saved? false
:page-state {}
:all-pieces {}}))


(defn set-pieces-fresh []
(all-pieces (fn [pcs] swap! app-state assoc :all-pieces pcs)))

最佳答案

不要将 :all-peices 设置为 (all-pieces) 的结果。函数ajax-success-handler应该设置:all-peices(all-pieces) 的结果是启动异步调用的结果,而不是响应。当响应到达时,处理程序将被调用。

(fn [pcs] swap! app-state assoc :all-pieces pcs)

不进行任何交换,就像交换一样!需要在括号中...它只是一个返回 pcs 的函数。考虑将其提升为命名函数,以便您可以单独测试它:

(def app-state
(atom {:all-pieces {}}))

(defn pieces-handler [pcs]
(swap! app-state assoc :all-pieces pcs))

(defn fetch-pieces []
(GET "/art/pieces" {:handler pieces-handler}))

(fetch-pieces)

关于ajax - 如何处理 cljs-ajax 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35906629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com