从 javascript 调用 HttpHandler

发布于 2024-11-07 16:01:01 字数 1566 浏览 0 评论 0原文

我有一个简单的页面,带有通过 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 的结果,例如文件。

有什么想法吗?

I have a simple page with button which calls HttpHandler via JavaScript.

HttpHandler gets lots of files and adds them to a zip file, after finishing work zip file will be added to Response.

This operation can take several minutes. I would like to execute some JavaScript function after finishing work of HttpHandler.

How can I do it?

My code:

<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:

I have found other solution. Using XMLHttpRequest.

Code:

 <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>

In onResponse() I can see my zip file in responseText (binary). But I don't have any idea how I can say to browser to download result of working httphandler such as file.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

以往的大感动 2024-11-14 16:01:01

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

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

I would use JQuery AJAX and then on success, write a function that will do whatever work you need it to. Plus with AJAX you can show the user an icon that says loading so they know something is actually processing, instead of the page just hanging and nothing appearing to happen.

$.ajax({
  url: "FileStorage.ashx",
  context: document.body,
  success: function(){
     // Whatever you want to do here in javascript.
  }
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文