我正在尝试使用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重定向将我带到下一页,但与表单操作具有相同的问题。
这是我不想保存到数据库的临时数据。
有人可以帮我指导我的选择吗?
答案 0 :(得分:1)
如我所见,您无需重定向,只需执行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中,命名为camelCase,因此您应该使用myDate
重命名。 。:)。
无论如何,由于仅通过字符串传递数据,因此您可以尝试将其序列化并将其添加到请求正文中(我不知道这是否是最佳实践,这只是浮现在脑海的第一件事可能会起作用)