去处理 HTML 表单数据
Go handling of HTML form data
我无法从 HTML 表单获取数据。
模板显示在 localhost:3000,我提交并被带到 localhost:3000/results,结果为“404 页面未找到”。 URL 不包括任何表单字段。
package main
import (
"html/template"
"net/http"
"github.com/go-martini/martini"
)
func main() {
m := martini.Classic()
m.Get("/", func(res http.ResponseWriter, req *http.Request) { // res and req are injected by Martini
t, _ := template.ParseFiles("form.gtpl")
t.Execute(res, nil)
})
m.Get("/results", func(r *http.Request) string {
text := r.FormValue("text")
return text
})
m.Run()
}
模板是:form.gtpl
<html>
<head>
<title>Title Here</title>
</head>
<body bgcolor="#E6E6FA">
<h1>Header Here</h1>
<form action="/results" method="POST">
Date: <input type="text" name="dated" size="10" value="01/12/2015">
Triggers: <input type="text" name="triggers" size="100" value="Trigger1|Trigger2"><br><br>
<textarea name ="text" rows="20" cols="150">random text here
</textarea>
<input autofocus type="submit" value="Submit">
</form>
</body>
</html>
已将 m.GET 更改为 m.POST,并且已修复。
请注意,您在表单中指定了 method="POST"
,但在服务器代码中您指定了 m.Get("/results",...)
。该行应该是 m.Post("/results",...)
。 Martini 正在尝试路由请求,但没有 POST /results
的定义,只有 GET /results
我无法从 HTML 表单获取数据。 模板显示在 localhost:3000,我提交并被带到 localhost:3000/results,结果为“404 页面未找到”。 URL 不包括任何表单字段。
package main
import (
"html/template"
"net/http"
"github.com/go-martini/martini"
)
func main() {
m := martini.Classic()
m.Get("/", func(res http.ResponseWriter, req *http.Request) { // res and req are injected by Martini
t, _ := template.ParseFiles("form.gtpl")
t.Execute(res, nil)
})
m.Get("/results", func(r *http.Request) string {
text := r.FormValue("text")
return text
})
m.Run()
}
模板是:form.gtpl
<html>
<head>
<title>Title Here</title>
</head>
<body bgcolor="#E6E6FA">
<h1>Header Here</h1>
<form action="/results" method="POST">
Date: <input type="text" name="dated" size="10" value="01/12/2015">
Triggers: <input type="text" name="triggers" size="100" value="Trigger1|Trigger2"><br><br>
<textarea name ="text" rows="20" cols="150">random text here
</textarea>
<input autofocus type="submit" value="Submit">
</form>
</body>
</html>
已将 m.GET 更改为 m.POST,并且已修复。
请注意,您在表单中指定了 method="POST"
,但在服务器代码中您指定了 m.Get("/results",...)
。该行应该是 m.Post("/results",...)
。 Martini 正在尝试路由请求,但没有 POST /results
的定义,只有 GET /results