如何重定向到某个网址

2024-01-03

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重定向到某个网址 的相关文章

随机推荐