我的表单中有一个多选输入,我试图在我的处理程序中获取所选的值,但我不能,我怎么能得到这些值?
<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>
我的处理程序:
func myHandler(w http.ResponseWriter,r *http.Request) { fmt.Println(r.FormValue("new_data")) // result-> [] fmt.Println(r.Form("new_data")) // result-> [] }
表单序列化数据,从JS控制台中选择选项1和2:
>$('#myform').serialize() >"new_data=1&new_data=2"
解决方法
您不能/不应该使用
但请注意,如果不调用r.FormValue(),则必须通过显式调用
Request.FormValue()
函数,因为它只返回1个值.使用Request.Form [“new_data”],它是包含所有值的字符串片.
但请注意,如果不调用r.FormValue(),则必须通过显式调用
Request.ParseForm()
来触发解析表单(并填充Request.Form映射).
您还有一个HTML语法错误:name属性的值未关闭,请将其更改为:
<select id="new_data" name="new_data" class="tag-select chzn-done" multiple="" style="display: none;">
这是一个完整的应用程序来测试它的工作原理(错误检查ommited!):
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> `