判断下载是否完成..................

talentwing 2012-06-06 02:55:52
现在有个需求是这样的...在JSP页面有一个button...
点击之后会location.href到一个servlet
这个servlet会到数据库抽一批数据并生成EXCEL..然后通过ServletOutputStream返回到页面给用户下载这个文件..
因为在抽取数据这个过程需要消耗一定的时间(10秒以上,数据很多)
现在在这个button的onclick方法里面要加个判断..当servlet的文件没返回时要将这个按钮disabled...否则用户觉得没反应狂点的话服务器就被搞崩了.........然后文件返回并下载完成后(其实文件返回了就行,下载完成不完成无所谓)..要将这个按钮激活可以继续点....这个要怎么弄呢?
...全文
228 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
talentwing 2012-06-07
  • 打赏
  • 举报
回复
找了个别的方式做了.....查询一次才能导出一次....点查询的时候释放导出按钮.....
wmyasw 2012-06-07
  • 打赏
  • 举报
回复
那你既然是跳转到另一个页面了 你怎么还要操作当前页面的 按钮呢? 你应该是跳转的时候就把按钮释放啊

,还有就是 这个 下载这个完全也可以在当前页面做操作啊,可以通过弹出层里加载 新页面,或者一个 ifram 引入页 试试 ,还有按钮释放 的话 如果你想操作的话, 可以用 setTimeOut() 做 控制 在10秒后自动释放,或者在 当前页面从新刷新 后释放,怎么杨操作 就看你 是如何做页面了 我大概提供这个思路,你自己也 考虑下
talentwing 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

其实你也可以在 servlet里做判断, 也就是在 关闭数据流后返回个布尔 条件到页面, 页面判断这个布尔条件来区分是否 进行 打开按钮 不过类似这种东西 建议用 ajax 或做 遮罩层 你可以找找相关资料,其实这也是拓展思路
[/Quote]
location.href = XXX;
应该不是原来的页面了..相当于跳转到另外一个页面了...但是这个页面的header是
response.setContentType("application/ms-excel");
response.addHeader("Content-Disposition", "attachment; filename=" + GridTurnpage.encode("OCNCommunity", "utf-8") + ".xls");
所以这个页面不是打开一个新的页面..而是弹出下载框...

你说的ajax那个有资料么?我找了一下..貌似都是通过打开一个新的页面提交到servlet做的...包括工程里的其他实现案例也是这么做的...
遮罩层这个其实也有..但是都跳转到另外一个页面了..所以这个遮罩有没有都没区别..
我的js是这么写的

function exportCommFunc(){
var rowset = getTable();
var allcount = rowset.getTotalRowCount();
if(allcount > 10000){
alert("导出的数据超过最大限制(10000),请缩小导出范围!");
return;
}
if(allcount < 1 ){
alert("没有需要导出的数据!");
return;
}
var areaId = getForm().getValue("areaId");
if (areaId==null || areaId==""){
alert("请选择行政区域!");
return;
}
var communityName = getForm().getValue("cname");
var regionalLocName = getForm().getValue("rl");
var url = "<%=request.getContextPath()%>"
+ "/business/export?"
+ "areaid=" + areaId
+ "&communityname=" + communityName
+ "®des=" + regionalLocName;
g_AIButtonManager.get("expCommBtn").setText("请稍候...重新导出请重新查询地址");
document.all("expCommBtn").disabled = true;
location.href = url;
}
wmyasw 2012-06-06
  • 打赏
  • 举报
回复
其实你也可以在 servlet里做判断, 也就是在 关闭数据流后返回个布尔 条件到页面, 页面判断这个布尔条件来区分是否 进行 打开按钮 不过类似这种东西 建议用 ajax 或做 遮罩层 你可以找找相关资料,其实这也是拓展思路
wmyasw 2012-06-06
  • 打赏
  • 举报
回复
- -你返回的是当前页面么?
talentwing 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

最好使用ajax实现
[/Quote]

ajax没有头绪..我试过..貌似没法将二进制数据文件直接传到浏览器..浏览器没弹出下载框这东东...
talentwing 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

- -这个很简单啊,如果用ajax 就在点击 onclick的时候 如果有用到 jquery就$(this).attr('disabled','disabled');
在 返回数据后 $(this).removerAttr('disabled'); 或 js时 this.disabled=true; 但是 建议你不这么做,最好 做一个遮罩层 进行处理, 在加载完数据后在撤销遮罩层, jq……
[/Quote]
但是我这没用jquery....用的是最基本的JSP+servlet...
还有..现在已经是onclick的时候将按钮disabled了...但是没法自动恢复..因为我不知道这个文件是否已经生成并传到浏览器了...
PS:我生成文件是用的一个单独的servlet..就是在onclick里有一个
location.href="<%=request.getContextPath()%>/export?id=xxx";

这个servlet里的doGet里就是
ServletOutputStream aOutputStream = response.getOutputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
baos.writeTo(aOutputStream);
aOutputStream.flush();
aOutputStream.close();

不是通过ajax方式取得数据的....文件也是在服务器端就生成好了的...
asd7228 2012-06-06
  • 打赏
  • 举报
回复
最好使用ajax实现
talentwing 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

给个用户提醒什么的,"正在下载中,请稍后..."
[/Quote]
呃...这个是提醒了....我意思是怎么恢复...就是下载完了之后这个自动去掉....
wmyasw 2012-06-06
  • 打赏
  • 举报
回复
- -这个很简单啊,如果用ajax 就在点击 onclick的时候 如果有用到 jquery就$(this).attr('disabled','disabled');
在 返回数据后 $(this).removerAttr('disabled'); 或 js时 this.disabled=true; 但是 建议你不这么做,最好 做一个遮罩层 进行处理, 在加载完数据后在撤销遮罩层, jquery 有这个插件,BlockUi 你可以参考下
猿敲月下码 2012-06-06
  • 打赏
  • 举报
回复
给个用户提醒什么的,"正在下载中,请稍后..."

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧