2011-05-15 84 views
2

我有一个简单的页面按钮,它通过JavaScript调用HttpHandler。从javascript中调用HttpHandler

HttpHandler获取大量文件并将它们添加到一个zip文件,完成工作后,zip文件将被添加到Response。

此操作可能需要几分钟的时间。我想在完成HttpHandler的工作后执行一些JavaScript函数。

我该怎么办?

我的代码:

<asp:Button ID="btnDownload" runat=server Text="Download" OnClientClick="Download()" /> 

<script type="text/javascript"> 
    function Download() 
    { 
     var url = 'FileStorage.ashx'; 
     window.open(url);    
    } 
</script> 

UPD 1:

我已经找到其他的解决办法。使用XMLHttpRequest。

代码:

<script type="text/javascript"> 
     var xmlHttpReq = createXMLHttpRequest(); 

     function Download() { 
      var url = 'FileStorage.ashx';    
     xmlHttpReq.open("GET", url, false); 
     xmlHttpReq.onreadystatechange = onResponse; 
     xmlHttpReq.send(null);   
    } 

    function onResponse() { 
     if (xmlHttpReq.readyState != 4) 
     { return; }   
     var serverResponse = xmlHttpReq.responseText; 
     alert(serverResponse);   
    } 

    function createXMLHttpRequest() { 
     try { return new XMLHttpRequest(); } catch (e) { } 
     try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { } 
     try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { } 
     alert("XMLHttpRequest not supported"); 
     return null; 
    } 
    </script> 

在onResponse()我可以看到的responseText(二进制)我的zip文件。但我对浏览器如何下载文件等工作的httphandler的结果并不知情。

任何想法?

回答

4

我会使用JQuery AJAX,然后在成功时编写一个函数,该函数将执行您需要的任何工作。再加上AJAX,你可以向用户显示一个图标,说明加载,以便他们知道某些东西实际上正在处理中,而不是页面挂起而没有任何事情发生。

$.ajax({ 
    url: "FileStorage.ashx", 
    context: document.body, 
    success: function(){ 
    // Whatever you want to do here in javascript. 
    } 
}); 
+0

谢谢,但我不能使用JQuery,我需要其他解决方案 – Ukraine 2011-05-15 12:35:07

+1

不知道我可以帮忙。您显然需要知道处理程序何时完成执行,也许轮询目录中zip文件的计时器。一旦完成并找到文件,运行一个函数。虽然这看起来不对。抱歉。 – Dietpixel 2011-05-15 12:39:27