通常,在制作Web应用程序时,我使用JSON API和SPA,但是我正在尝试学习如何在Go中使用更简单的服务器端模板化方法和默认表单行为。
我正在做的事情与here非常相似。唯一的区别是,为了简单起见,我将action
更改为"/"
并从同一处理程序处理GET和POST(按方法类型过滤)。
服务器端模板
<form action="/" method="post" >
...
<div class="form-group">
<label for="myname">Dev Name</label>
<input type="text" class="form-control" id="myname" name="myname" value="{{.MyDname}}">
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form>
服务器端
func MainPage(w http.ResponseWriter, r *http.Request) {
fmt.Println("method:", r.Method) //get request method
if r.Method == "GET" {
t, err := template.New("RTL Page").Parse(page)
if err != nil {
log.Fatal(err)
}
err = t.Execute(w, State)
if err != nil {
log.Fatal(err)
}
}
if r.Method == http.MethodPost {
r.ParseForm()
...
}
}
初始网页呈现良好,数据在POST中正确发送,我仅用200回答POST,但随后我的网页空白。
如何告诉浏览器保留或重新呈现原始页面?我是否需要向POST发送HTML响应? 200以外的东西?
最佳答案
您要问的是HTTP的基本操作。客户端发送一个请求,服务器响应该请求。如果客户端是浏览器,则浏览器显示响应。
对于GET请求,浏览器将GET请求发送到服务器,服务器以HTML页面响应,然后浏览器显示它。
对于POST请求,浏览器将发送POST请求以及表单中提交的值,并且服务器应以HTML页面作为响应,以便浏览器可以支付它。显示的响应将是POST响应,因此,如果您重新加载该页面,它将尝试重新提交表单。
关于html - POST方法的默认浏览器表单行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58189164/