gpt4 book ai didi

go - 如何重定向到一个网址

转载 作者:IT老高 更新时间:2023-10-28 13:02:42 25 4
gpt4 key购买 nike

从上一页收集数据后,我想向客户显示另一页。但是我在服务器端重定向新 URL 时遇到了麻烦。这是我的逻辑:

  1. 通过 POST 操作向服务器提交用户输入;
  2. 服务器运行函数 saveChoice() 将用户输入保存到数据库中;
  3. 用户输入保存后,服务器向客户端发送一个新的 URL;
  4. 当客户端 GET 新 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 */
}
}

这是模板:

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

我可以知道如何重定向到新页面吗?

附言如果我将 URL 放在按钮上,那么服务器将不会运行 saveChoice()

最佳答案

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>

注意表单的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,这将导致对响应编写器的多次调用。

关于go - 如何重定向到一个网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35934298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com