Есть ли способ узнать, что событие браузера относительно файла, готового к загрузке, запущено? У меня есть сценарий, который генерирует файл, и пока это происходит, я показываю goding. Как только появится это сообщение: http://img.ruphp.com/php/CmZHE.png (файл готов к загрузке, завершен скрипт) Я хотел бы остановить gif.
Можно ли это узнать с помощью JS? Использование ajax – это опция, но потребуется больше времени, поскольку для нее потребуется несколько изменений в системе.
Благодаря!
Я сделал это в следующем примере: http://geekswithblogs.net/GruffCode/archive/2010/10/28/detecting-the-file-download-dialog-in-the-browser.aspx
Для PHP обратите внимание, что так вы отправляете cookie:
header('Content-type: application/octet-stream'); header('Set-Cookie: fileDownload=1; path=/'); header('Content-Disposition: attachment; filename='.$filename);
Путь выше действительно важен. Затем JS также нужен путь для удаления cookie, например:
$.removeCookie('fileDownload', { path: '/' })
У меня была такая же проблема, и я выбрал решение в два этапа.
Я думаю, что это хорошее решение для показа и скрытия сообщения spinner.gif и / или ожидания при подготовке файла, пока загрузка не будет готова.
?cmd=prepare
на мой uri. Это подготовит мой PDF-файл на стороне сервера и сохранит его в доступной папке клиентом (например, domain.ext / documents / my_pdf_name.pdf). HTML (bootstrap 3):
<a href="/search/download" class="btn btn-primary pull-left download"> <i class="fa fa-file-pdf-o"></i> Download result in PDF </a>
jQuery:
$(function() { $('.download').on('click', function(e) { e.preventDefault(); $('.loading').show(); url = $('.download').attr('href') + '?cmd=prepare'; $.ajax({ url: url, type: 'get', success: function(filename) { console.log(data); window.location = filename; $('.loading').hide(); } }); }); });
Сторона сервера PHP:
// ajax call if(addslashes($_GET["cmd"]) == "prepare") { echo create_pdf($_SESSION["search"], $out="prepare"); die(); }
create_pdf()
вернет имя файла клиенту, а в моей функции успеха в ajax-запросе я вызову window.location = filename
который покажет мне «сохранить как окно». Подготовка документа на стороне сервера вызывается ajax, но загрузка – нет!