Правильный способ вызвать загрузку файла (в PHP)? - PullRequest
7 голосов
/ 15 января 2009

Быстрый (и, надеюсь, простой) вопрос: мне нужно инициировать загрузку файла PDF, созданного файлом PHP. Я могу сделать это:

<a href="download.php">Download</a>

но я должен делать это по-другому? Javascript может быть? Выше работает, но в окне отображается «Загрузка ...», пока не начнется загрузка. Я хотел бы предоставить некоторую обратную связь пользователю, что что-то происходит.

Идеи

Примечание: У меня уже есть код, который отправляет файл с сервера. Работает отлично. Этот вопрос просто о том, как лучше всего вызвать этот скрипт из клиента.

Некоторые сайты загружаются автоматически. Как они это делают?

Проблема с прямым URL-адресом заключается в том, что в случае ошибки сценария PHP он заменит содержание существующей страницы, а это не то, что я хочу.

Ответы [ 4 ]

13 голосов
/ 15 января 2009

EDIT

Да, JavaScript, что-то вроде:

<a href="download.php" onclick="this.innerHTML='Downloading..'; downloadPdf(this);">Download</a>

Если вам нужно понять, когда начинается загрузка, вам, вероятно, нужно вызвать iframe, а затем использовать событие onload для него .. например:

// javascript
function downloadPdf(el) {
    var iframe = document.createElement("iframe");
    iframe.src = "download.php";
    iframe.onload = function() {
        // iframe has finished loading, download has started
        el.innerHTML = "Download";
    }
    iframe.style.display = "none";
    document.body.appendChild(iframe);
}
3 голосов
/ 15 января 2009

Решение, которое вы имеете для загрузки, в порядке. Возможно, вы захотите рассмотреть визуальную обратную связь с пользователем, например, используя javascript, чтобы показать «Загружается, подождите, пожалуйста, сообщение» на текущей странице, когда ссылка нажата с помощью обработчика нажатия. Или просто укажите, что загрузка может занять некоторое время, чтобы начать рядом со ссылкой. Поскольку IE выгружает страницу, останавливая анимацию в формате GIF, я предпочитаю текстовые указания для загрузки файлов.

2 голосов
/ 15 января 2009

При автоматическом запуске загрузок обычно используется метатег внутри обычной страницы:

<META HTTP-EQUIV="REFRESH" CONTENT="10.0;URL=download.php">

В этом примере браузер через 10 секунд перенаправит файл download.php.

2 голосов
/ 15 января 2009

подделать его с помощью обработчика события onclick, чтобы показать вращающийся GIF

<a href="download.php" onclick="ShowDownloading();">Download</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...