我想在从上一页收集数据后向客户显示另一页.但我无法在服务器端重定向新的URL.这是我的逻辑:
我坚持第3步(这是流程的一个例子):
type Stuff struct{
List []string
}
func checkcheck(w http.ResponseWriter, r *http.Request) {
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"])
/* step 3: make user open another URL */
}
}
Run Code Online (Sandbox Code Playgroud)
这是模板:
<html>
<script>
$(function () {
$('form').on('submit', function (e) {
e.preventDefault();
$.ajax({
type: 'post',
data: $('form').serialize(),
});
});
});
</script>
<body>
<form method="POST">
{{range .List}}
<input type="checkbox" name="choices" value="{{.}}"> <span>{{.}}</span><br>
{{end}}
<input type="submit" value="Submit">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我可以知道如何重定向到新页面吗?
ps如果我把URL放在按钮上,那么服务器就不会运行saveChoice()
Aru*_*ath 32
http状态303是这里的适当响应.所以用它重定向请求.
if r.Method == "POST" {
saveChoice(r.Form["choices"])
http.Redirect(w, r, newUrl, http.StatusSeeOther)
}
Run Code Online (Sandbox Code Playgroud)
如果您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>
Run Code Online (Sandbox Code Playgroud)
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)
}
}
Run Code Online (Sandbox Code Playgroud)
否则,服务器会尝试呈现表单和重定向的URL,这将导致对响应编写器的多次调用.
| 归档时间: |
|
| 查看次数: |
33263 次 |
| 最近记录: |