页面等待下载响应如何处理?

[b]流程描述:[/b]
报表下载页面向服务器发出生成报表的请求,服务端即时生成报表,然后返回生成的excel报表文件InputStream流给客户端。
[b]问题:[/b]
因即时生成报表,服务端处理比较耗时,从请求发出到响应返回,大概等要10秒。所以想在这段时间,报表下载页面给用户一个等待提示,直到响应返回。我想请教下,让请求提交后,置提交按钮不可用,等到下载对话框弹出时(说明响应返回了),如何实现将按钮重新置为可用?

谢谢~~

5个回答

这样处理这个方案
1.使用AJAX提交即时生成报表的请求
2.即时生成的报表及时的生成临时文件存放,对于临时文件的存在周期不是我们讨论的重点,重点是,后台返回的是临时文件的URL地址
3.AJAX提交代码要获取的就是这个地址,获取后在显示一个真实的下载链接让用户点击就行了

这里面有些地方是可以商榷的
比如,后台生成的报表文件可以是生成带临时的目录文件,而且配置临时目录是可以列表的,这样的好处就是,第一步提交以后,后台可以先生成目录名称,在没有生产报表文件的时候就返回结果,前台就可以用AJAX的方法定时对临时目录列表,查看有没有文件输出。
当然复杂的话,可以对输出文件进行接口定义,用来指示报表生成的进度,以及成败等信息。

当然这写和后台服务器的生成方法有关,如果是同步生成的,那要写的好的话,可能就要特殊处理了,要对服务器返回的数据(比如进度,成败)边接收边处理了,这个太复杂我们可以后续讨论。

先看看我说的这个是否满足你的要求。当然AJAX的话提交后禁止用户操作就简单了,前面有朋友给出

[code="js"]function setButtonDisable(el,value){
el.disable=value;
}

setButtonDisable(按钮对象,'disabled');//是不可用

setButtonDisable(按钮对象,'false');//是可用
[/code]

没有测试的伪代码, 只是我通常的操作思路

这种的话,我建议你先发送一个ajax请求到后台先处理“,从请求发出到响应返回,大概等要10秒”这段时间的问题,置提交按钮不可用,结束后,返回一个标识到前台,前台就按钮重新置为可用,再发送请求去取生成的excel报表文件InputStream流给客户端,就好了

也不要将按钮直接变成不可用了,换种思路,将按钮变成一段文字显示“报表真正生成中....”,或者显示一个进度条。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问