首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取文本中的查询参数?

如何获取文本中的查询参数?
EN

Stack Overflow用户
提问于 2015-09-14 20:12:26
回答 2查看 4.6K关注 0票数 10

我用的是秘书和试剂。这是我的密码:

代码语言:javascript
复制
(def view (atom nil))

(defn layout [view]
  [:div @view])

(reagent/render-component [layout view] (.getElementById js/document "message"))

(secretary/set-config! :prefix "")

(secretary/defroute home-path "/" [query-params]
  (timbre/info "Path : /, query params : " query-params)
  (let [warning (:warning query-params)
        success (:success query-params)
        login-failed (:login_failed query-params)]
    (when warning
      (timbre/info "Warning found : " warning)
      (reset! view [:h4 [:span.label.label-warning warning]]))
    (when success
      (timbre/info "Success found : " success)
      (reset! view [:h4 [:span.label.label-info success]]))
    (when login-failed
      (timbre/info "Login failed")
      (reset! view [:h4 [:span.label.label-warning "Login Failed."]]))))

(let [h (History.)]
 (goog.events/listen h EventType.NAVIGATE #(secretary/dispatch! (.-token %)))
 (doto h
  (.setEnabled true)))

忽略:前缀值(我尝试了"“、"#”,也根本没有设置:前缀),这段代码只适用于以下路由:

代码语言:javascript
复制
http://localhost:8080/login#/?success=SuccessMessage

但它不适用于这样的路线:

代码语言:javascript
复制
http://localhost:8080/login?success=SuccessMessage

我真正想要实现的是解析来自朋友的登录失败,如果失败,它会将我重定向到

代码语言:javascript
复制
http://localhost:8080/login?&login_failed=Y&username=someUser

并向用户显示登录失败消息。我不需要为这个使用秘书,任何解析查询参数的方法对我来说都是可以的。

困难的方法是解析查询字符串,我可以使用:

代码语言:javascript
复制
(-> js/window .-location .-search)

我相信有些图书馆已经做得很好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-15 06:21:08

我找到了。使用https://github.com/cemerick/url (为clojure和clojurescript工作),可以这样做:

代码语言:javascript
复制
(require '[cemerick.url :as url])
(:query (url/url (-> js/window .-location .-href)))
票数 16
EN

Stack Overflow用户

发布于 2019-09-30 13:05:41

来自文档

如果URI包含查询字符串,它将自动提取到: query (用于字符串路由匹配器)和最后一个元素(用于正则表达式匹配器)。

代码语言:javascript
复制
(defroute "/users/:id" [id query-params]
  (js/console.log (str "User: " id))
  (js/console.log (pr-str query-params)))

(defroute #"/users/(\d+)" [id {:keys [query-params]}]
  (js/console.log (str "User: " id))
  (js/console.log (pr-str query-params)))

;; In both instances...
(secretary/dispatch! "/users/10?action=delete")
;; ... will log
;; User: 10
;; "{:action \"delete\"}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32573130

复制
相关文章

相似问题

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