我有一个使用 DurandalJS v1.2 构建的单页应用程序 (SPA),它与支付网关集成。 SPA 将通过向其页面执行普通表单 POST 来转到支付网关的页面。
用户完成支付网关页面后,支付网关将向我的 SPA 发送表单 POST。
因为它是一个 POST,所以我在 ASP.NET MVC 中通过为发送的各种表单参数呈现 require.js 模块定义来处理它,然后在需要处理的 View 模型中使用该模块结果。
这一切工作正常,我处理结果,然后停留在同一个 SPA 页面上。这与 Post-Redirect-Get 的典型 Web 模式不同,因为 SPA 不执行任何重定向。
现在的问题是,当按下浏览器刷新按钮时,它会弹出浏览器的重试后确认对话框(我不想要)。
有没有办法通过使用 JavaScript 来避免这种情况,或者 PRG 模式是唯一的方法吗?
注意:更改 window.location、document.location 以及使用 History.replaceState 似乎都不起作用(至少在 Chrome 中)。
最佳答案
如果您可以修改支付网关,则拦截表单提交 ( <form onsubmit="...; return false">
),从 JavaScript 处理表单字段,而不是让浏览器将它们发送到服务器。
如果无法修改支付网关,则修改document.location
来自 POST 返回后的 JavaScript(例如通过添加 #
)。如果用户在此之后按下重新加载,浏览器将不会要求确认。
关于javascript - 避免在 SPA 中重新提交表单(无 P-R-G),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19135515/