web开发过程中,经常会遇到原页面与弹出页面之间进行交互的问题,如果只是简单的变量传递,还是不难的,而我们经常遇到的一个实际场景是:例如有一个用户列表页面,点击“新建”按钮,弹出一个创建用户的页面,填写完信息后要提交表单并关闭窗口,同时列表页面中要列出新建的用户,这个时候我们一些开发人员喜欢使用的方式为:
userForm.submit();
opener.location.reload();//或者有些开发人员喜欢用opener.location=列表页面的请求url
window.close();
上面的代码有一个很明显的问题,就是如果表单提交给后台,后台还在处理,而此时原页面已经执行了重载,那么等新用户在后台存储后了,也不会反映到列表页面中了,当然刷新一个就有了,但是就达不到我们所要的效果了。下面给你介绍一种比较稳妥的方式(ajax方式就不介绍了):
先让表单提交,提交后还是回到弹出的那个页面,或者一个其它的页面,然后在该页面中做判断,如果后台信息处理成功,那么就执行原页面的重载,然后关闭窗口。
当然有些开发人员说,前面的那种方式,一直在项目中使用没有发现什么问题,那我告诉你,那是因为你比较幸运,后台处理速度很快,列表重载的时候,后台已经处理完了,但是一旦后台处理慢了,客户就该找麻烦了。
所以常用的设计是:
1。
原来界面中加入
if(showModalDialog(弹出的新的界面))
{
原来界面的query()
}
2。
新的弹出的界面中加入
function init()
{
if(提交成功)
{
windows.retrunValue=true;
return;
}
}
对于读取后台的处理还是提交后还是回到弹出的那个页面