2015-02-24 14 views
6

我在我的表單中有多個選擇輸入,我試圖在我的處理程序中獲取選定的值,但我不能,我怎樣才能獲得這些值?如何從使用Golang的表單中多選擇值?

<form action="process" method="post"> 
    <select id="new_data" name="new_data class="tag-select chzn-done" multiple="" style="display: none;"> 
    <option value="1">111mm1</option> 
    <option value="2">222mm2</option> 
    <option value="3">012nx1</option> 
    </select> 
</form> 

我的處理程序:使用選項1和2

func myHandler(w http.ResponseWriter, r *http.Request) { 
    fmt.Println(r.FormValue("new_data")) // result-> [] 
    fmt.Println(r.Form("new_data")) // result-> [] 
} 

形式序列化數據從JS控制檯選擇:

>$('#myform').serialize() 
    >"new_data=1&new_data=2" 
+3

select在name屬性中缺少結束引用。 – 2015-02-24 15:36:52

+1

您是否在請求中調用了['ParseForm'](http://golang.org/pkg/net/http/#Request.ParseForm)? – 2015-02-24 15:47:29

+0

高斯這是問題,我忘了調用r.ParseForm()謝謝 – Goku 2015-02-24 15:53:26

回答

14

你不能/不應該使用Request.FormValue()功能因爲那隻返回1個值。使用Request.Form["new_data"]這是包含所有值的string的一部分。
但是請注意,如果您不撥打r.FormValue(),則必須通過明確呼叫Request.ParseForm()來觸發解析表單(並填充Request.Form地圖)。

您也有一個HTML語法錯誤:name屬性值沒有關閉,將其更改爲:(!錯誤檢查中省略)

<select id="new_data" name="new_data" class="tag-select chzn-done" 
    multiple="" style="display: none;"> 

下面是一個完整的應用程序來測試它的工作原理:

package main 

import (
    "fmt" 
    "net/http" 
) 

func myHandler(w http.ResponseWriter, r *http.Request) { 
    if r.Method == "POST" { 
     // Form submitted 
     r.ParseForm() // Required if you don't call r.FormValue() 
     fmt.Println(r.Form["new_data"]) 
    } 
    w.Write([]byte(html)) 
} 

func main() { 
    http.HandleFunc("/", myHandler) 
    http.ListenAndServe(":9090", nil) 
} 

const html = ` 
<html><body> 
<form action="process" method="post"> 
    <select id="new_data" name="new_data" class="tag-select chzn-done" multiple="" > 
     <option value="1">111mm1</option> 
     <option value="2">222mm2</option> 
     <option value="3">012nx1</option> 
    </select> 
    <input type="Submit" value="Send" /> 
</form> 
</body></html> 
` 
+0

非常感謝@icza – Goku 2015-02-24 16:02:16

相關問題