为了账号安全,请及时绑定邮箱和手机立即绑定

如何重定向到一个网址

如何重定向到一个网址

Go
慕田峪4524236 2021-12-20 16:46:15
从上一页收集数据后,我想向客户显示另一页。但是我在服务器端重定向新 URL 时遇到问题。这是我的逻辑:使用 POST 操作向服务器提交用户输入;服务器运行函数 saveChoice() 将用户输入保存到数据库中;用户输入保存后,服务器向客户端发送一个新的 URL;当客户端 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>我可以知道如何重定向到新页面吗?ps 如果我将 URL 放在按钮上,那么服务器将不会运行 saveChoice()
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-12-20
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

package main


import (

  "net/http"

  "html/template"

)


type data struct {

  List string

}


func main() {

  http.HandleFunc("/", check)

}


func check(w http.ResponseWriter, r * http.Request) {

  if r.Method == "GET" {

    sinfo: = data {

      List: "Here is a list of the files Located with in",

    }


    var tpl_ds = "index.html"


    //t, err := template.New("").Parse(tpl_ds)

    t: = template.Must(template.ParseFiles(tpl_ds))


    r.ParseForm()

    t.Execute(w, sinfo)

  }


  if r.Method == "POST" {

    saveChoice(r.Form["choices"])

    http.Redirect(w, r, newUrl, http.StatusSeeOther)

  }

}


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 144 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信