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

时间:2018-12-09 17:17:48

标签: 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重定向将我带到下一页,但与表单操作具有相同的问题。

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

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

1 个答案:

答案 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重命名。 。:)。

无论如何,由于仅通过字符串传递数据,因此您可以尝试将其序列化并将其添加到请求正文中(我不知道这是否是最佳实践,这只是浮现在脑海的第一件事可能会起作用)