从javascript调用HttpHandler

从javascript调用HttpHandler,javascript,asp.net,ashx,Javascript,Asp.net,Ashx,我有一个带有按钮的简单页面,它通过JavaScript调用HttpHandler HttpHandler获取大量文件并将其添加到zip文件中,完成工作后,zip文件将添加到响应中 此操作可能需要几分钟。我想在完成HttpHandler的工作后执行一些JavaScript函数 我怎么做 我的代码: <asp:Button ID="btnDownload" runat=server Text="Download" OnClientClick="Download()" /> <sc

我有一个带有按钮的简单页面,它通过JavaScript调用HttpHandler

HttpHandler获取大量文件并将其添加到zip文件中,完成工作后,zip文件将添加到响应中

此操作可能需要几分钟。我想在完成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>

函数下载()
{
var url='FileStorage.ashx';
窗口打开(url);
}
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>

var xmlHttpReq=createXMLHttpRequest();
函数下载(){
var url='FileStorage.ashx';
xmlHttpReq.open(“GET”,url,false);
xmlHttpReq.onreadystatechange=onResponse;
xmlHttpReq.send(null);
}
函数onResponse(){
if(xmlHttpReq.readyState!=4)
{return;}
var serverResponse=xmlHttpReq.responseText;
警报(服务器响应);
}
函数createXMLHttpRequest(){
请尝试{返回新的XMLHttpRequest();}捕获(e){}
尝试{returnnewActiveXObject(“Msxml2.XMLHTTP”);}catch(e){}
请尝试{返回新的ActiveXObject(“Microsoft.XMLHTTP”);}catch(e){}
警报(“不支持XMLHttpRequest”);
返回null;
}
在onResponse()中,我可以在responseText(二进制)中看到我的zip文件。但我不知道如何才能对浏览器说下载工作的httphandler的结果,比如文件


有什么想法吗?

我会使用JQuery AJAX,如果成功,我会编写一个函数,它可以完成您需要的任何工作。另外,使用AJAX,您可以向用户显示一个图标,上面写着“加载”,这样他们就知道实际正在处理某些内容,而不是页面挂起,看起来什么也没有发生

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

谢谢,但我不能使用JQuery,我需要其他解决方案。我不确定我能帮上忙。显然,您需要知道处理程序何时完成执行,可能需要轮询目录中zip文件的计时器。完成并找到文件后,运行函数。尽管这似乎是错误的。很抱歉