2010-06-01 73 views
4

我无法在任何地方找到答案,而这些细节让我发疯。我一直负责更新旧的应用程序,只使用JavaScript的客户端用户界面的东西。过去使用PDF模板生成报告并手动循环数据集,基本上进行表单填充,然后显示报告。这已经使服务器多次崩溃。一旦报告数据被返回,如何停止动画GIF?

我已经更新了应用程序以使用报表服务器,以帮助使报表生成负载脱机。每个工作都很好,除了在报告返回后动画GIF不会停止。我使用:

<span id="hiddenImg" style="display: none"> 
<img src="" id="animate" align="middle" alt="Loading"/> 
</span> 

随着下面的JavaScript:

function showDiv() 
    { 
    document.getElementById('hiddenImg').style.display =""; 
    setTimeout('document.images["animate"].src="images/loading.gif"',100); 
    } 

其中精美的作品。在服务器端,我有这样的:

Response.AddHeader("Content-Type", "application/" + format); 
Response.AddHeader("Content-Disposition", "attachment;filename=" + "report." + format); 
data = report.GetBytes(reportpath, rbFormat.SelectedValue);  
Response.BinaryWrite(data); 
Response.End(); 

其中数据是由报表服务器返回的字节流。

唯一不起作用的是即使在报告发送并且用户点击打开/保存/取消对话框后,动画GIF仍将继续播放。我怀疑它是Response.End();呼叫,但是即使消除这条线路并让服务器继续运行也不能缓解这个问题。在收到报告数据后,页面似乎没有执行任何回发,并且.html源文件显然显示了GIF。如果我手动回发,我将失去打开/保存/取消对话框,并且用户没有机会显示内容。

我在这里不知所措,我已经在这几个小时,任何帮助表示赞赏。 感谢提前。

+0

[Javascript:我怎么知道IE文件下载提示弹出时可能的重复?](http://stackoverflow.com/questions/2948529/javascripthow-i-can-know-when-the-ie-文件下载提示弹出) – Piskvor 2010-06-01 14:17:50

+0

检查链接的问题 - 您正在寻找的功能是相同的;再加上其中一个答案有一个有趣的解决方法。 – Piskvor 2010-06-01 14:19:43

+0

好的,我读了上面的链接。有趣。我认为为会话cookie提供nonce密钥的解决方案可以工作。有没有人有我可以参考和研究的例子? – 2010-06-01 17:34:42

回答

1

我假设你已经接受了另一个不具有动画效果的GIF版本的想法,并且当你想停止动画时交换它?

只需将.src设置为非动画版本,就不会花时间给出您已有的代码。在这种情况下,您还可以获得完成状态的好处等。

另外,如果您正在调用set timeout,则最好将函数引用而不是代码作为字符串传递。这样你不需要浏览器引擎就可以在运行时评估代码,这种代码在调试时要慢得多,而且难以调试,并且可以获得更好的开发支持。

功能animateGif(){ document.images [ “动画”]。SRC = “图像/ loading.gif” } 功能stopAnimating(){ document.images [ “动画”]。SRC =“图像/loaded.gif“ }

0

当在服务器端使用Response对象时,IE以某种方式取消回发。这是奇怪的行为。

说你有GenerateReport.aspxbtnSubmit控制和btnSubmit_Click事件处理程序。在处理函数中你有你的代码:

//Some other codes 
    Response.AddHeader("Content-Type", "application/" + format); 
    Response.AddHeader("Content-Disposition", "attachment;filename=" + "report." + format); 
    data = report.GetBytes(reportpath, rbFormat.SelectedValue);  
    Response.BinaryWrite(data); 
    Response.End(); 

解决的办法是:

  1. 独立的Response对象到另一页,说Report.aspx。所以你的GenerateReport.aspx不应该有任何Response对象。全部Response对象在Report.aspx
  2. btnSubmit_Click事件处理程序,调用JavaScript代码来打开新窗口Report.aspx,像这样:

    //Some other codes 
    ClientScript.RegisterStartupScript(this.GetType(), "javascript", "window.open('../Report.aspx')", true); 
    
  3. 在您btnSubmit控制你应该有OnClientClick其称之为showDiv()显示加载图片。

通过疏导Response对象到另一个页面,则GenerateReport.aspx将保留其回发时,网页提交您的加载图像会自行消失。