我正在尝试使用 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/