douleng0794 2015-02-24 15:21 采纳率: 0%
浏览 111
已采纳

如何使用Golang从表单中获取多选值?

I have a multiple select input in my form and I'm trying to get the selected values in my handler, but I can't, how can I get those values?

<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>

My Handler:

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

The form serialized data with option 1 and 2 selected from JS console:

   >$('#myform').serialize() 
   >"new_data=1&new_data=2"
  • 写回答

1条回答 默认 最新

  • doujiaozhan4397 2015-02-24 15:50
    关注

    You can't/shouldn't use the Request.FormValue() function because that only returns 1 value. Use Request.Form["new_data"] which is a slice of strings containing all the values.
    But note that if you don't call r.FormValue(), you have to trigger parsing the form (and populating the Request.Form map) by calling Request.ParseForm() explicitly.

    You also have an HTML syntax error: the value of the name attribute is not closed, change it to:

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

    Here is a complete app to test that it works (error checks 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>
    `
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊