问题描述:我在父窗口点击添加用户,弹出子窗口页面,在子窗口填写表单后,点击保存,交给后台,后台保存数据,并查询数据库,将所有用户显示在父窗口中。
解决之路:
1.我在表单提交之后加上了这么一句:window.close() ,可是加上这一句之后,表单不提交了。
2.google之后,看到有网友说要等表单提交之后,再关闭,也给出了解决方案:setTimeout(function(){window.close()},1000),可是表单依旧不能提交。
3.这个方案行不通后,我参考了另外一位网友的回答,必须用ajax异步提交表单,可是组织数据是个难题,我那个表单里东西太多了,后来看到了这个
可是后台接收不到数据,我想应该时我的表单的enctype="multipart/form-data"。
4.再坚持坚持,或许就有方案能够解决了,果不其然,让我找到了ajaxSubmit()(至于其用法以及与ajaxForm()的区别用时再google),这时候我再写上window.close()后,表单能提交了,后台数据也能接收了,子窗口也能关闭了,可是父窗口并没有将查询后的结果显示出来,这个时候我测试了一下,我发现当我不添加文件的时候,父窗口是能够将所有用户数据(包含刚才新添加的)显示出来,为什么呢?我依然不明白。哦,对了,最后一点问题是在我添加这么一句迎刃而解:window.opener.location.reload()。
$("#Form1").ajaxSubmit({
type: "POST",
url:"system/elecUserAction_save.do",
success:function(){
window.opener.location.reload();
window.close();
}
});
我后台用的是struts2
//保存用户
public String save() {
userService.saveUser(user);
return "save";
}
struts.xml配置:
<result name="save" type="redirectAction">elecUserAction_home.do</result>