javascript - 从 javascript 调用 HttpHandler

标签 javascript asp.net ashx

我有一个简单的页面,带有通过 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>

更新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 的结果,例如文件。

有什么想法吗?

最佳答案

我会使用 JQuery AJAX,然后在成功后编写一个函数来完成您需要的任何工作。另外,使用 AJAX,您可以向用户显示一个表示正在加载的图标,以便他们知道某些内容实际上正在处理,而不是页面只是挂起并且似乎没有发生任何事情。

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

关于javascript - 从 javascript 调用 HttpHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6008362/

相关文章:

javascript - 有没有一种有效的方法可以让按钮自动将文本复制到剪贴板? (JavaScript)

javascript - 有没有办法在 highcharter wordcloud 中使用两个系列(或某种组)?

javascript - 在reactjs中显示文件上传成功或失败的消息

asp.net - 可见的 GUID 是否存在安全风险?

asp.net - 如何在 Asp.Net 中使用 MySQL 获取查询返回的错误代码

c#:使用 Handler(.ashx) 使用 javascript 获取帖子发送

c# - ashx 请求中的 Session.SessionId 持久化

c# - System.Web.HttpRequestValidationException 问题

c# - 我可以在外部 DLL 中使用 ASP.NET Session[] 变量吗

c# - ASHX 文件下载损坏的文件