Правильный способ инициировать загрузку файла (в PHP)?

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

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

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

Идеи?

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

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

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

Этот вопрос имеет отношение к PHP ничего такого, и то, как он назван, сформулирован и помечен тегами, вводит в заблуждение посетителей, которые ищут что-то совершенно другое. Я пишу это, потому что это первый результат, который я получил, когда искал что-то действительно связанное с PHP. Я пытался редактировать, но мое редактирование было отклонено :( Так что я любезно прошу оригинального автора или кого-то еще, кто имеет достаточно привилегий, чтобы удалить любые ссылки на PHP из этого сообщения.

Tom 23.08.2012 17:12

Это тоже случилось со мной, Том, отредактировал.

Zach Lysobey 24.12.2012 20:19

Я на самом деле нашел это полезным, потому что он появился первым, когда я искал "файл загрузки php-сервера с помощью javascript"

Boom 22.04.2015 21:57
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
3
18 025
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

подделать это, используя обработчик события onclick, чтобы показать вращающийся gif

<a href = "download.php" onclick = "ShowDownloading();">Download</a>
Ответ принят как подходящий

РЕДАКТИРОВАТЬ

Да, 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);
}

Вы должны вернуть false, чтобы отключить ссылку.

Gumbo 25.01.2009 13:14

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

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

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

Этот пример перенаправит браузер через 10 секунд на download.php.

Другие вопросы по теме