Позвоните в HttpHandler из JavaScript - PullRequest
2 голосов
/ 15 мая 2011

У меня есть простая страница с кнопкой, которая вызывает HttpHandler через JavaScript.

HttpHandler получает много файлов и добавляет их в zip-файл, после окончания работы zip-файл будет добавлен в Response.

Эта операция может занять несколько минут.Я хотел бы выполнить некоторую функцию JavaScript после окончания работы HttpHandler.

Как я могу это сделать?

Мой код:

<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 () я вижу свой zip-файл в responseText (двоичный файл).Но я понятия не имею, как сказать браузеру, чтобы он загружал результат работы httphandler, например, файл.

Есть идеи?

1 Ответ

4 голосов
/ 15 мая 2011

Я бы использовал JQuery AJAX, а затем в случае успеха напишу функцию, которая будет выполнять любую работу, которая вам нужна. Кроме того, с помощью AJAX вы можете показать пользователю значок с надписью «загрузка», чтобы они знали, что что-то на самом деле обрабатывается, а не просто висит страница и ничего не происходит.

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