在Web应用程序中实现重定向后获取模式时,服务器代码的最后一步通常看起来像这样(伪代码):
if (postSuccessful)
{
redirect("/some-page?success=true")
}
也就是说,重定向URL在查询字符串中具有某种成功参数,以便您知道何时显示漂亮的“您的表单已提交!”。您页面上的消息。问题在于success=true
仅在初始化页面时才保留在查询字符串中。如果用户刷新页面或将页面添加为书签,即使没有进行任何其他POST,他们也会收到错误的成功消息。
是否有一个优雅的解决方案,该解决方案不涉及使用JavaScript从查询字符串和浏览器历史记录中消除success=true
?此解决方案有效,但肯定会增加页面的加载过程的复杂性。
答案 0 :(得分:0)
您可以使用服务器端技术来实现此功能,而无需任何JavaScript。 Stes列在下面:
发布成功后,使用当前时间戳信息重定向到/some-page
:
if (postSuccessful)
{
redirect("/some-page?success=true×tamp=1559859090747")
}
当服务器收到GET /some-page?success=true×tamp=1559859090747
请求时,将timestamp
参数与当前时间戳进行比较,检查是否在最近3秒钟之内(或者您可以根据网络环境更改此数字) )。
如果timestamp
参数在最近3秒钟内,则表明此GET /some-page?success=true
请求是服务器重定向的结果。如果不是,则更像是“用户刷新页面或为其添加书签”的结果。
在处理GET /some-page
的服务器代码中,根据步骤3的结果呈现不同的HTML。仅当当前访问是服务器重定向的结果时,才显示成功消息。