关于JS关闭新窗口的问题

tianpeng91 发布于 2013/09/27 16:01
阅读 225
收藏 0
小弟最近有这样一个需求,点一个按钮的时候下载文件,但下载文件的过程中需要一段时间准备文件,为了避免用户误会,所以呢,就用 window.showModalDialog 打开一 个新的页面,页面内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
	正在准备数据,请稍候...
	<script type="text/javascript">
		var p = '${param.p}';
		window.location = p;
	</script>
</body>
</html>
这个是JSP,但是我如何判断文件开始下载了呢?我想文件开始下载,就把当前窗口关掉。谁知道该怎么做呢?非常感谢!
加载中
0
dedenj
dedenj
向session插条记录,用个ajax去查记录,查到就关
0
sxgkwei
sxgkwei

从来没有遇到过人家点击下载了,你还没文件的情况。一般情况,如果生成文件真需要很长时间,那就全部预生成好,等人家下载是直接调文件给人家就是了。如果文件只是根据页面内容生成pdf,xls,word之类的文件,那就是同步线程啊,文件瞬间就能在内存中生成好,直接把生成出来的流调给下载的人就行了啊。

我觉得啊,你可能以开始想这个事情的逻辑时,就想岔路上去了。

sxgkwei
sxgkwei
回复 @张浩春 : dwr.engine.openInDownload(data);这是我在一个dwr的项目里复制的dwr js下载文件的代码,这个js都可以接收data数据启动下载,我想纯js肯定可以办到。
sxgkwei
sxgkwei
回复 @张浩春 : http://www.oschina.net/code/snippet_176115_13742 这个是我以前写的,应该对你这个问题有帮助。还有,这个url可以从后台传回来,你只要把文件生成好,保存到硬盘临时文件夹即可。
tianpeng91
tianpeng91
回复 @sxgkwei : 额,,,话说AJAX如何接收文件?这样真没搞过,请教,谢谢!
sxgkwei
sxgkwei
回复 @张浩春 : 同时我觉得你也没必要打开新窗口去做这个事情,用户点击“下载”按钮后,你可以弹出一个气泡提示或者遮罩层提示“正在创建文件中...”用ajax去请求file文件返回即可,在ajax回调函数中第一句就消除上面弹出的提示框,然后用js接收文件即可。
sxgkwei
sxgkwei
回复 @张浩春 : 那就是统计这个计算耗时可能较长,你才打算做成这样对吧?我觉得你还是直接就等着取到数据,然后生成出文件下载给用户,所有事情一溜做下去比较靠谱。至于统计耗时长,那就是优化统计方法的问题,和你完成这个下载功能没关系。
下一页
返回顶部
顶部