Отображение изображения пульсатора в ожидании загрузки, чтобы быть готовым в Tapestry
На моей странице есть форма, которая генерирует большой файл PDF (это может занять до 20 секунд). Есть ли способ показать пульсатор во время создания загружаемого файла и скрыть его при появлении запроса на загрузку?
Я сделал некоторые проверки, изначально думал, что смогу использовать прогрессивный дисплей, но решил, что это не его цель.
Я подумал, что мог бы добавить функцию JS, которая будет вызывать показ моего пульсатора при нажатии кнопки "Загрузить", но я не совсем уверен, как скрыть его, когда появляется окно загрузки.
Есть ли способ сделать это в гобелене?
2 ответа
Возможно, лучшим решением будет НЕ отправить форму. Вы можете использовать JavaScript для создания URL-адреса GET и использовать iframe.
например:
<form>
<input id="someText" />
<button onclick="downloadPdf()">Click Me</button>
</form>
<script>
function downloadPdf() {
var url = "/path/to/pdf?someText=" + encodeURIComponent($("#someText").val());
startThrobber();
$('<iframe src="' + url + '" onLoad="stopThrobbber()">').appendTo('body');
}
</script>
У HTTP есть ограничение: нельзя возвращать ни одного ответа, содержащего PDF и немного json.
Что вы можете сделать, это:
- Отправьте форму (в которой есть параметр зоны)
- Запустите асинхронную работу, которая генерирует PDF
- Возврат немедленно из отправки (до создания PDF)
- Запустите некоторый JavaScript, который опрашивает работу, пока она не будет завершена
- После того, как работа будет завершена, загрузите PDF с помощью javascript (
document.location.href = /path/to/pdf
)
Вы можете увидеть ссылку прогресса для примера опроса асинхронной задачи. Вам нужно будет сохранить PDF где-нибудь в асинхронной задаче (например, сеанс, база данных или файловая система).