避免在SPA中重新提交表格(不含P-R-G)

时间:2013-10-02 11:07:34

标签: javascript single-page-application durandal post-redirect-get

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

一旦用户完成支付网关页面,支付网关就会将表格POST回到我的SPA。

由于它是一个POST,我通过为发送的各种表单参数呈现require.js模块定义来处理ASP.NET MVC中的服务器端,然后在需要处理该模块的视图模型中使用该模块结果

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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