2010-10-05 23 views
8

Tính năng đồng bộ không ràng buộc các trường trong biểu mẫu POST. Đây là tuyến đường của tôi def:Compojure liên kết thông số yêu cầu HTTP từ URL, nhưng không phải từ biểu mẫu POST

(defroutes main-routes 
    (POST "/query" {params :params} 
    (debug (str "|" params "|")) 
    "OK...") 
) 

Khi tôi đăng biểu mẫu với các trường trong đó, tôi nhận được | {} | tức là không có tham số. Ngẫu nhiên, khi tôi đi http://localhost/query?param1=value1, thông số không trống và các giá trị được in trên bảng điều khiển máy chủ.

Có một ràng buộc nào khác cho các trường biểu mẫu không ??

Trả lời

13

đảm bảo bạn có các trường nhập có thuộc tính name = "zzz", nhưng không chỉ id = "zzz".

dạng html thu thập tất cả các đầu vào và viết chúng bằng tên thuộc tính

my_post.html

<form action="my_post_route" method="post"> 
    <label for="id">id</label> <input type="text" name="id" id="id" /> 
    <label for="aaaa">aaa</label> <input type="text" name="aaa" id="aaa" /> 
    <button type="submit">send</button> 
</form> 

my_routes.clj

(defroutes default-handler 
    ;,,,, 
    (POST "/my_post_route" {params :params} 
    (str "POST id=" (params "id") " params=" params)) 
    ;,,,, 

sản phẩm phản ứng như

id = 21 params = {"aaa" "aoeu", "Id" "21"}

3

Đây là một ví dụ tuyệt vời về cách xử lý các thông số

(ns example2 
    (:use [ring.adapter.jetty    :only [run-jetty]] 
    [compojure.core     :only [defroutes GET POST]] 
    [ring.middleware.params   :only [wrap-params]])) 

(defroutes routes 
    (POST "/" [name] (str "Thanks " name)) 
    (GET "/" [] "<form method='post' action='/'> What's your name? <input type='text' name='name' /><input type='submit' /></form>")) 

(def app (wrap-params routes)) 

(run-jetty app {:port 8080}) 

https://github.com/heow/compojure-cookies-example

Xem dưới Ví dụ 2 - Middleware là tính năng

Các vấn đề liên quan