Автоматическая загрузка файла после отправки формы - PullRequest
12 голосов
/ 02 октября 2009

У меня есть веб-форма, которую пользователи заполняют онлайн. Когда они нажимают кнопку «Отправить», начинается загрузка файла для них.

В данный момент я обрабатываю отправку формы, генерирую подходящий файл для пользователя и запускаю его с помощью подходящих заголовков. например ...

header('Content-type: "application/octet-stream"');
header('Content-Disposition: attachment; filename="yourfile.txt"');
header("Content-Transfer-Encoding: binary");

Однако, так как это сразу же начинает загрузку, исходная форма остается на экране браузером.

Мне бы очень хотелось перейти к экрану с благодарностью после завершения загрузки (или до начала загрузки). Я знаю, что это возможно, потому что почти каждый сайт загрузки, который вы посещаете, делает это (обычно для того, чтобы загрузить всю рекламу до начала загрузки).

Итак, как мне показать экран «Спасибо», который начинает загрузку через секунду?

Какое решение может повлиять на поведение кнопки "Назад", поскольку я не хочу, чтобы файл снова загружался без заполнения формы?

Я использую PHP на сервере и могу положиться на Javascript (и jQuery), которые доступны на клиенте.

Спасибо.

Ответы [ 3 ]

23 голосов
/ 02 октября 2009

Вы можете отправить форму в документ Спасибо и поместить туда META обновление для загрузки файла:

<meta http-equiv="refresh" content="3;url=download.php">
<p>Thank you! The download will start in 3 seconds. If not, use this link to download the <a href="download.php">file</a></p>
3 голосов
/ 02 октября 2009

Добавьте вторую страницу, которая говорит что-то «спасибо, ваша загрузка загрузится через несколько секунд» и запускает загрузку, используя javascript:

$(document).ready(function(){
  window.setTimeout(function(){
    window.location = 'http://yourdownloadhost.com/file.zip';
  }, 1500);
});

или используйте мета-редирект.

0 голосов
/ 02 октября 2009

Вы можете вставить скрытый iframe на свою страницу и отправить свою форму этому iframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...