1

我有一个使用 DurandalJS v1.2 构建的单页应用程序 (SPA),它与支付网关集成。SPA 将通过向其页面执行普通表单 POST 来进入支付网关的页面。

用户完成支付网关页面后,支付网关将向我的 SPA 发送表单 POST。

因为它是一个 POST,所以我在 ASP.NET MVC 中通过为正在发送的各种表单参数渲染一个 require.js 模块定义来处理它的服务器端,然后在需要处理结果的视图模型中使用这个模块。

这一切正常,我处理结果,然后留在同一个 SPA 页面上。这与 Post-Redirect-Get 的典型 Web 模式不同,因为 SPA 不执行任何重定向。

现在的问题是当按下浏览器刷新按钮时,它会弹出浏览器的重试后确认对话框(我不想要)。

有没有办法通过使用 JavaScript 来避免这种情况,还是 PRG 模式是唯一的方法?

注意:似乎更改 window.location、document.location 以及使用 history.replaceState 都不起作用(至少在 Chrome 中)。

4

1 回答 1

1

如果您可以修改支付网关,然后拦截表单提交 ( <form onsubmit="...; return false">),从 JavaScript 处理表单字段,而不是让浏览器将它们发送到服务器。

如果您无法修改支付网关,则document.location在 POST 后立即修改 from JavaScript(例如,通过添加 a #)。如果用户在此之后按下重新加载,浏览器将不会要求确认。

于 2013-10-02T11:12:00.867 回答