为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
梦里花落0921 2021-09-13 20:16:03
我的表单中有一个多选输入,我试图在我的处理程序中获取选定的值,但我不能,我怎样才能获取这些值?<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"
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

您不能/不应该使用该Request.FormValue()函数,因为它只返回 1 个值。使用包含所有值Request.Form["new_data"]的strings切片。

但请注意,如果您不调用r.FormValue(),则必须Request.Form通过Request.ParseForm()显式调用来触发解析表单(并填充地图)。


您还有一个 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>

`


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 287 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信