我有一个使用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中)。
答案 0 :(得分:1)
如果您可以修改付款网关,然后拦截表单提交(<form onsubmit="...; return false">
),则从JavaScript处理表单字段,而不是让浏览器将它们发送到服务器。
如果您无法修改付款网关,请在POST回来之后立即从JavaScript修改document.location
(例如,添加#
)。如果用户在此之后按下重新加载,浏览器将不会要求确认。