POST方法的默认浏览器表单行为是什么?

问题描述 投票:-1回答:1

通常,在制作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以外的东西?

html go web browser
1个回答
0
投票

您要问的是HTTP的基本操作。客户端发送一个请求,服务器响应该请求。如果客户端是浏览器,则浏览器将显示响应。

对于GET请求,浏览器将GET请求发送到服务器,服务器以HTML页面响应,然后浏览器显示它。

对于POST请求,浏览器将发送POST请求以及表单中提交的值,并且服务器应以HTML页面进行响应,以便浏览器可以支付它。显示的响应将是POST响应,因此,如果您重新加载该页面,它将尝试重新提交表单。


0
投票

@@ Volker指出了需要更改的地方。 POST需要由我想显示的HTML回答,因此解决此问题的真正简单方法是:

func MainPage(w http.ResponseWriter, r *http.Request) {
    fmt.Println("method:", r.Method) //get request method

    if r.Method == http.MethodPost {
        r.ParseForm()
        ...
    }

  if r.Method == "GET" || r.Method == "POST" {
        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)
        }
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.