此类问题的一个非常通用的解决方案是 Post/Redirect/Get-pattern。
这意味着当您想要对在后台更新某些内容的页面进行 POST 时,您实际上会创建两个目标页面:
页码 1
POST 的目标页面。包含用于更新数据库/文件系统/API 或任何需要完成的逻辑。这只是一个没有任何真实视觉反馈的 URL,而是在逻辑完成后将您重定向到第 2 页(见下文)。重定向是一个简单的 GET 而不是 POST。
页码 2
显示您对“第 1 页”操作的反馈的页面。可能只是一条消息“密码更新OK”或来自数据库的实际数据或任何适合您的东西。
现在,当有人使用您的表单时,他们会被发布到将执行后台操作的第 1 页,然后他们被重定向到第 2 页。
现在,如果他们重新加载,他们将不会重做整个逻辑部分,而只会重做反馈部分。
维基百科对此有很好的解释:
https://en.wikipedia.org/wiki/Post/Redirect/Get
如何在 Progress WebSpeed 中进行重定向
在您的 outputHeader-procedure 或您所做的任何地方
output-content-type ("text/html":U).
相反,如果 output-content-type: 首先执行您的逻辑,然后插入如下内容:
OUTPUT-HTTP-HEADER("Status", "301").
OUTPUT-HTTP-HEADER("Location","http://www.yoursite.com/newurl").
OUTPUT-HTTP-HEADER("","").
现在,一旦逻辑处理完毕,您将被重定向到服务器端。如果需要,您还可以在 url 中插入参数:
DEFINE VARIABLE iId as INTEGER NO-UNDO.
OUTPUT-HTTP-HEADER("Status", "301").
OUTPUT-HTTP-HEADER("Location","http://www.yoursite.com/newurl?id=" + STRING(iId)).
OUTPUT-HTTP-HEADER("","").