2015-02-24 4 views
6

Mam wielu wybierz wejście w moim formularzu i próbuję uzyskać wybrane wartości w mojej obsługi, ale nie mogę, w jaki sposób uzyskać te wartości?W jaki sposób uzyskać wartości wielokrotnego wyboru z formularza za pomocą Golanga?

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

Moja Handler:

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

formie serializowane dane z opcji 1 i 2 wybranymi z konsoli JS:

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

Po wybraniu brakuje zamkniętej oferty na nazwę atrybutu. –

+1

Czy wywołałeś na żądanie ['ParseForm'] (http://golang.org/pkg/net/http/#Request.ParseForm)? –

+0

Ups to był problem, zapomniałem zadzwonić r.ParseForm() dzięki – Goku

Odpowiedz

14

Nie można/nie powinno używać funkcji Request.FormValue() ponieważ to zwraca tylko 1 wartość. Użyj Request.Form["new_data"], który jest plasterkiem string s zawierającym wszystkie wartości.
Należy jednak pamiętać, że jeśli nie zostanie wywołana r.FormValue(), należy wyzwolić parsowanie formularza (i zapełnienie mapy Request.Form), wywołując jawnie wywołanie Request.ParseForm().

mieć również błąd składni HTML: wartość atrybutu name nie jest zamknięta, należy zmienić go na adres: (! Kontrole błędów, pominięte)

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

Powyżej znajduje się pełna aplikacja do testowania, że ​​to działa:

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

Wielkie dzięki @icza – Goku