2012-12-08 4 views
11

간단한 html 양식을 이동 중에 처리하려고합니다. 그러나 제출시 게시물 데이터를 가져올 수 없습니다. r.Form 맵은 항상 []입니다. 내가 어디로 잘못 가고 있는지 모르겠다. 사전에request.Post 배열이 양식 제출시 비어 있음

감사합니다.

다음은 첫 번째 ParseForm를 호출 할 필요가 같은 http://play.golang.org/p/aZxPCcRAVV

package main 

import (
    "html/template" 
    "log" 
    "net/http" 
) 

func rootHandler(w http.ResponseWriter, r *http.Request) { 
    t, _ := template.New("form.html").Parse(form) 
    t.Execute(w, "") 
} 

func formHandler(w http.ResponseWriter, r *http.Request) { 
    log.Println(r.Form) 
    rootHandler(w, r) 
} 

func main() { 
    http.HandleFunc("/", rootHandler) 
    http.HandleFunc("/login", formHandler) 
    http.ListenAndServe("127.0.0.1:9999", nil) 
} 

var form = ` 
<h1>Login</h1> 
<form action="/login" method="POST"> 
<div><input name="username" type="text"></div> 
<div><input type="submit" value="Save"></div> 
</form> 
` 

답변

11

이 보이는 코드입니다. go docs에서

// Form contains the parsed form data, including both the URL 
// field's query parameters and the POST or PUT form data. 
// This field is only available after ParseForm is called. 
// The HTTP client ignores Form and uses Body instead. 
Form url.Values 

그리고 몇 가지 코드를 사용하면 효과를 얻을 수 있습니다.

func formHandler(w http.ResponseWriter, r *http.Request) { 
    err := r.ParseForm() 
    if err != nil { 
     //handle error http.Error() for example 
     return 
    } 
    log.Println(r.Form) 
    rootHandler(w, r) 
} 
+0

감사! 필자는 웹 애플리케이션 기사 [http://golang.org/doc/articles/wiki/#tmp_8](http://golang.org/doc/articles/wiki/#tmp_8)]를 따르고있었습니다. 아마 약간 날짜가 있고 ParseForm()을 언급하지 않습니다. – rputikar

+1

이 예제는 필요한 경우 ParseForm을 호출 할 FormValue 메서드를 사용합니다. ParseForm을 직접 호출해야하므로 Form 변수에 직접 액세스하고 있습니다. – masebase