Как скачать php-файл, сгенерированный по почте, избегая изменения местоположения страницы?

У меня есть файл download.php который я передаю по почте с данными, а затем генерирует SVG-файл для загрузки, установив заголовок с

header('Content-Type: application/svg+xml');
header("Content-Disposition: attachment; filename=\"myfilename\"");

Теперь вопрос в том, как начать загрузку. Моей первой попыткой было поместить данные в форму и отправить их по почте с

<form id="svgform" method="post" action="download.php" style="display: none;">
...
</form>

Обычно это работает нормально. Это не изменит местоположение на download.php, а только инициирует загрузку. К сожалению, у этого метода есть предостережение о том, что (в редком случае), когда запрос php генерирует ошибку (по какой-либо причине), страница изменяется. Я хочу избежать изменения страницы любой ценой (поскольку несохраненные данные могут быть потеряны). У этого также есть некоторые другие странные побочные эффекты [1].

Итак, затем я попытался начать загрузку в новой вкладке с помощью

<form id="svgform" method="post" target="_blank" action="download.php" style="display: none;">
...
</form>

Это приводит к появлению уродливой белой страницы за мгновение до начала загрузки. Хуже того, в IE 11 белая страница не закрывается, а диалог загрузки появляется на предыдущей странице, поэтому пользователь не видит ее сразу.

Итак, мне интересно, как лучше идти вперед. Может ли загрузка быть лучше достигнута через AJAX и как?

[1] По какой-то причине Firefox не может генерировать HTML-данные инспектора, когда инспектор был открыт ранее. Вот способ понять, что я имею в виду. Осмотрите какой-нибудь элемент в Firefox и оставьте инспектора открытым. Теперь перейдите на страницу, которая загружает данные с помощью вышеуказанного метода (или аналогичного), например, http://download.cnet.com/CCleaner/3001-18512_4-10315544.html. Инспектор становится пустым, и ни один элемент больше не может быть проверен. Более того, некоторые из моих скриптов перестали работать должным образом в IE 11. Я пока не уверен, почему, возможно, это связано с тем, что происходит в Firefox.

1

Решение

Поскольку вы не хотите изменять URL-адрес при публикации формы, но по-прежнему хотите, чтобы загрузка началась, вместо этого вы можете опубликовать форму iframe.

<form target="my-iframe-id" method="post" ... >

и iframe:

<iframe id="my-iframe-id" ... ></iframe>

Вы можете установить iframe как display: none; так что это не показывает.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector