Можете ли вы использовать Javascript для обнаружения окна загрузки файла, созданного на стороне сервера?

У меня есть подключаемый модуль jQuery, который я использую для динамического создания и отображения формы на странице default.aspx asp.net, а затем отправьте ее. Страница, на которую он отправляется, является страницей pdf.aspx. Страница создает PDF-файл, а затем использует Response.Write для записи файла (приложение/pdf) в браузер. Я использую тот же метод для рендеринга файлов XLSX в браузере. Это работает очень хорошо, но мне нужен обратный вызов или какое-то событие, чтобы сообщить кнопке, когда перестать вращаться. Это не позволяет пользователю постоянно нажимать кнопки Excel или PDF. Кто-нибудь знает способ обнаружить диалоговое окно файла, когда оно не было создано с помощью javascript? Я также открыт для других методов обратного вызова со стороны сервера.


person Zacho    schedule 16.06.2010    source источник
comment
См. stackoverflow.com/questions/666468/   -  person Crescent Fresh    schedule 16.06.2010
comment
Это решение звучит великолепно, но я не совсем понимаю часть загрузки. Независимо от того, загружается ли iframe при загрузке страницы или динамически создается в JS, загрузка происходит еще до того, как форма будет отправлена. Что мне не хватает?   -  person Zacho    schedule 16.06.2010
comment
возможный дубликат Определить, когда браузер получает загрузку файла   -  person Liam    schedule 24.04.2014


Ответы (1)


То, как я это делаю, было предложено в ответ на вопрос, который я задал здесь некоторое время назад, Т.Дж. Краудер. Я не могу найти ответ с момента, когда я писал это в последний раз, потому что средство «поиска» Stackoverflow невероятно хромает, поэтому я, вероятно, наберу сообщение в блоге. Основная идея заключается в том, что ваш клиентский код (Javascript) должен добавлять дополнительный параметр при отправке запроса на загрузку. Параметр должен содержать какую-то сгенерированную случайную строку (возможно, достаточно только текущей временной метки). Затем сервер ищет этот параметр, и когда он готовит ответ с загружаемым файлом, он также устанавливает файл cookie и присваивает ему это случайное значение.

Сразу после отправки (или прямо перед этим, это не имеет большого значения) код Javascript должен запускать интервальный таймер с подпрограммой, которая просматривает значение document.cookie и проверяет, содержит ли оно эту случайную строку. Как только файл cookie содержит эту строку, вы знаете, что сервер отправил свой ответ и что был представлен диалог загрузки файла.

person Pointy    schedule 16.06.2010
comment
Это весело. Я попробовал это точное решение вчера, так как это было единственное, что я придумал. После установки файла cookie на стороне сервера я искал его на стороне клиента, используя: setTimeout(complete = checkCookie(fileComplete), 2000); каждые 2 секунды. Это не сработало, потому что я не мог прочитать клиентскую часть cookie. Возможно, я углублюсь в эту идею и попробую сегодня снова. Если это сработает, я дам вам знать. - person Zacho; 16.06.2010
comment
Что ж, если вы создаете случайную строку на клиенте, вам даже не нужно искать конкретный файл cookie — вы можете просто посмотреть document.cookie. Кроме того, убедитесь, что ваш сервер не делает ваши файлы cookie только http, иначе ваш скрипт не сможет их увидеть! Эта техника работает как чемпион для меня. - person Pointy; 16.06.2010