javascript - 避免在 SPA 中重新提交表单(无 P-R-G)

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

我有一个使用 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/

相关文章:

javascript - 我应该为 SPA 使用资源加载器,还是预先加载所有内容?

ruby-on-rails - Rails 服务器在前端发出两个请求后(有时)挂起

javascript - 如何将 .cshtml 和 .html 文件与 Durandal 一起使用

javascript - Durandal 的定义 block 使用 require.js 且不带参数

javascript - 使用 Require 和 Resharper 进行前端 javascript 测试

javascript - jQuery改变嵌套在div、段落标签和强标签中的文本

javascript - 如何使用 {flip : false}? 选择退出 'rtl'

javascript - 如何控制 Cordova 中的内存使用?

javascript - 关闭 Canvas 导航默认打开/关闭

javascript - Bower:如何修补包或应用覆盖?