http 状态 303 是此处的适当响应。因此用它重定向请求。
if r.Method == "POST" {
saveChoice(r.Form["choices"])
http.Redirect(w, r, newUrl, http.StatusSeeOther)
}
如果你的newUrl
应该向浏览器返回正确的 html 页面,您不需要使用 ajax。使用 html 表单。
<form action="/postHandler" method="post">
{{range .List}}
<input type="checkbox" name="choices" value="{{.}}"> <span>{{.}}</span><br>
{{end}}
<input type="submit" value="Submit">
</form>
Notice action
形式的定义为/postHandler
。输入运行您的端点的名称saveChoice
在那里发挥作用。
所以要避免http: multiple response.WriteHeader calls
使用此代码时出现错误。
func checkcheck(w http.ResponseWriter, r *http.Request) {
if r.Method == "GET" {
sinfo := Stuff{
List: some_slice
}
t, err := template.New("").Parse(tpl_ds)
checkErr(err)
err = r.ParseForm()
checkErr(err)
err = t.Execute(w, sinfo)
checkErr(err)
}
if r.Method == "POST" {
saveChoice(r.Form["choices"])
http.Redirect(w, r, newUrl, http.StatusSeeOther)
}
}
否则,服务器会尝试呈现表单和重定向的 URL,这将导致对响应编写器的多次调用。