1

我创建了小型组合 Web 应用程序,它可以使用提供的 URL 显示从其他网站获取的多个值。目前,这个 URL 被硬编码在我的一个函数中,现在我想添加基于文本字段和复选框中的值的动态 URL 创建功能。

这是我的页面的样子:

(defn view-layout [& content]
  (html [:body content]))

(defn view-input []
    (view-layout
     [:h2 "Find"]
     [:form {:method "post" :action "/"}
     ( for [category ["Cat1" "Cat2" "Cat3"]]
      [:input {:type "checkbox" :id category } category ] )       
      [:br]
     [:input {:type "text" :id "a" :value "insert manga name"}] [:br]
     [:input.action {:type "submit" :value "Find"}]
     [:a {:href "/downloads"} "Downloads"]]))

(defn view-output []
  (view-layout
    [:h2 "default images"]
    [:form {:method "post" :action "/"}         
      (for [name (get-content-from-url (create-url))]        
        [:label name [:br]]            
           )]))

(defn create-manga-url
  []
  "http://www.mysite.net/search/?tfield=&check=000")

以下是路线:

(defroutes main-routes            
   (GET "/" []
      (view-input))
  (GET "/downloads" []
      (view-downloads))
  (POST "/" []
       (view-output) ))

目前,我需要(create-url)函数帮助(返回一个字符串),我想在其中获取所有字段,对于我的搜索是必需的(一个文本字段和 3 个复选框),并从中解析值,这些值将被输入(连接) URL - 对于复选框,如果选中,则检查部分的值将是 1,而不是 0,否则保持 0(如果选中了两个复选框,则检查 = 100,或 010、011)。如果是文本字段,则 tfield=userinputtext。

编辑我花了很多时间作为 .Net 和 Java 开发人员,而这部分组合对我来说完全是个谜。这就是我想用(create-url)函数实现的(用 OO 风格编写的伪代码):

 (defn create-url [*text_field cbox1 cbox2 cbox3*]
(def url "http://www.mysite.net/search/?")
(def tfield "tfield=")
(def cbox "&check=")

(if (checked? cbox1)
(str cbox "1")
(str cbox "0"))

(if (checked? cbox2)
(str cbox "1")
(str cbox "0"))

(if (checked? cbox3)
(str cbox "1")
(str cbox "0"))

(str tfield (:value text_field))

(str url tbox cbox))

我为这个伪代码的样子道歉,但这是我想学习的部分:如何从表单中获取数据并解析它(在这种情况下,我想将表单字段中的值附加到字符串中)

谁能帮我这个?

4

1 回答 1

1

首先,您需要为 HTML 输入元素添加“名称”属性。'id' 属性不会在发布时发送到服务器。

接下来,我想一种类似于您的示例的快速方法是:

(POST "/" [a Cat1 Cat2 Cat3] (create-url a [Cat1 Cat2 Cat3]))

然后是这样的:

(defn checked? [c]
  (and c (= c "on")))

(defn checked->num [c]
  (if (checked? c) "1" "0"))

(defn create-url [a cats]
  (str "x?tfield=" a "&check="
    (apply str (for [c cats] (checked->num c)))))

或者只是删除两个助手:

(defn create-url [a cats]
  (str "x?tfield=" a "&check="
     (apply str (map #(if (= "on" %) "1" "0") cats))))
于 2013-04-05T17:12:05.043 回答