将window.top.location.href设置为Form Submission

时间:2015-08-10 18:47:55

标签: javascript html forms spring-mvc

我正在开发除了主窗口之外使用iframe叠加层的应用程序。其中一个叠加用于修改用户设置,其中一些会影响主窗口的显示。因此,在保存这些设置之后,我想更新主窗口,以便用户可以在不必重新登录应用程序的情况下查看其新设置,但我还没有找到一种既保持一致又呈现更新主体的方式窗口正确...

具体是单击“保存”按钮可调用JavaScript函数。此函数提交HTML表单以调用相应的Spring-MVC操作(saveXXXSettings.do)。在相应的服务器端方法(saveXXXSettings())中,对另一个重绘主页面的方法的保存后调用将呈现该页面的更新版本,但是在iframe覆盖内而不是浏览器的顶部框架内。所以我只是尝试将window.top.location.href设置为表单submisssion,即。,

window.top.location.href = settingsForm.submit();

并获得了一个HTTP错误页面,没有任何有用的信息。在查看这个站点和W3 School页面时,我看到HTML表单的默认方法类型是GET,所以我想知道是否唯一的方法来绕过我的错误来使用相应的Spring操作和参数字符串,即

window.top.location.href = saveSettings.do?formParam1=xxxx&formParam2=yyyy

我试图避免必须组装参数字符串只是为了实现我想要的窗口刷新,所以任何建议或建议都值得赞赏...

2 个答案:

答案 0 :(得分:0)

我建议改用iframe事件监听器。从主框架添加一个监听器到消息。可能看起来像这样......

window.addEventListener('message', function(e) {
  var submitParamters = e.data;
});

然后,当用户点击叠加iframe中的提交时,将消息发布到主窗口。可能看起来像这样......

mainWindow.postMessage(submitData, targetOrigin);

您可以在此处详细了解此信息...... http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage

这可以执行跨域消息传递,但也可以使用相同的域。

答案 1 :(得分:0)

感谢你的回答,CurtisJD,但我决定采用不同的方法:我将iframe叠加层中输入的值复制到主页面上的表单中,然后我提交该表单以保存值然后刷新主页,它在顶部(即浏览器)级别自动执行。再次感谢您的快速回复...