go - 由于没有 HTTP 重定向,执行模板提交问题?

标签 go

我正在尝试使用 go 将数据从一个页面传递到另一个页面。 这是我正在做的事情的简化版本:

//Attempting to go from page1.gohtml to page2.gohtml to page3.gohtml.

type myData stuct {
    data1 string
    data2 string
}

func page1(w http.ResposneWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        myTemplate.ExecuteTemplate(w, "page1.gohtml", my_data) //do current page
    }

   //populated myData

    myTemplate.ExecuteTemplate(w, "page2.gohtml", my_data) //go to next page
}

//My .gohtml forms are like so:
<form id="page1" name="page1" method="post">
    <input type="submit" class="click">
</form>

重复第 2 页到第 3 页的通用代码。

问题陈述:当我执行从第 1 页到第 2 页的模板时,我的数据结构仍然填充,但是页面仍然位于 localhost:80/page1

尽管显示第 2 页,但它不会移动到第 2 页。

这不是问题,直到我去执行第 2 页上的提交。 这使我回到第 1 页,而不是第 3 页。

我已尝试设置我的表单,并采取将我带到下一页的操作。 这会重定向我,但不会给我带来我需要的填充数据结构。

将提交设置为返回 false 会停止执行我的服务器代码。

执行 HTTP 重定向会将我带到下一页,但与表单操作有相同的问题。

这是我不想保存到数据库的临时数据。

有人可以帮助指导我的选择吗?

最佳答案

在我看来,您没有重定向,您只是执行 page2 模板。

对于重定向,尝试:

http.Redirect(w, r, "http://127.0.0.1/page2", 301)

代替

myTemplate.ExecuteTemplate(w, "page2.gohtml", my_data) //go to next page

编辑:

我现在明白我没有完全回答你的问题,因为我忽略了 my_data(顺便说一句,在 golang 中,命名是驼峰式,所以你应该用 myDate 重命名它... :).

无论如何,对于传递数据,因为它只是字符串,你可以尝试将其序列化并将其添加到请求正文中(我不知道这是否是最佳实践,这只是我脑海中浮现的第一件事这可能会奏效)

关于go - 由于没有 HTTP 重定向,执行模板提交问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694748/

相关文章:

vim - 在 vim ide 中禁用 vim-plug 中的 gofmt

Go 传输连接在 DNS 更改时保持事件状态

go - 64位最大值

c++ - 戈朗 : call Windows DLL functions

unit-testing - Golang : tests and working directory

arrays - 如何迭代两个 byte slice

go - 在 `NewCookieStore()` 中传递给 `gorilla/sessions` 的 secret key (或身份验证 key )应该是什么?

unit-testing - t.Cleanup有什么用?

go - 如何使用 jwt golang 包通过 ECDSA 方法签署 JWT - Sign in with Apple

go - 如何在一定时间后取消 goroutines