#javascript #asp.net #ashx
#javascript #asp.net #ashx
Вопрос:
У меня есть простая страница с кнопкой, которая вызывает HttpHandler через JavaScript.
HttpHandler получает множество файлов и добавляет их в zip-файл, после завершения работы zip-файл будет добавлен в ответ.
Эта операция может занять несколько минут. Я хотел бы выполнить некоторую функцию 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:
Я бы использовал jQuery AJAX, а затем, в случае успеха, написал функцию, которая будет выполнять любую работу, для которой вам это нужно. Кроме того, с помощью AJAX вы можете показать пользователю значок с надписью loading, чтобы они знали, что что-то на самом деле обрабатывается, вместо того, чтобы страница просто зависала и ничего не происходило.
$.ajax({
url: "FileStorage.ashx",
context: document.body,
success: function(){
// Whatever you want to do here in javascript.
}
});
Комментарии:
1. Спасибо, но я не могу использовать jQuery, мне нужно другое решение
2. Тогда не уверен, что смогу помочь. Очевидно, вам нужно знать, когда обработчик завершит выполнение, возможно, путем опроса по таймеру zip-файла в каталоге. Как только это будет сделано и файл будет найден, запустите функцию. Хотя это кажется неправильным. Извините.