Вопрос

У меня есть скрипт, который принудительно загружает, и я вызываю его через Javascript.Однако диалоговое окно не выскочит, вот download.php сценарий:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

Вот Javascript (с использованием jQuery):

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

Это перенаправляет мой браузер на другую страницу вместо того, чтобы показывать диалоговое окно "Вниз".

Я знаю, что переменная JS msg содержит файл с правильными заголовками, но я не знаю, что с ним делать, чтобы заставить его отобразить диалоговое окно загрузки.

Спасибо всем

p.s.Не знал, куда поместить этот поток на JS или PHP.

Редактировать:

У меня правильный подход, я в этом уверен :) - Пользователь заходит на мой сайт, заполняет форму и нажимает отправить.Через несколько секунд их файл должен появиться в диалоговом окне, которое они могут загрузить.Чтобы сделать это:

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

Это было полезно?

Решение

Он не показывает диалоговое окно из-за самого факта, что это вызов Ajax.

window.location.href = msg;

Это то, что перенаправляет вас.Я не думаю, что вам нужен вызов ajax здесь, просто вызовите страницу обычным способом по ссылке href.

Редактировать

Если вы хотите, чтобы форма была отправлена и отображалось диалоговое окно для загрузки, сделайте это:

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

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

Если он полный download.php скрипт, я не могу найти в нем переменную $file (только $ filename) - но в JS вы отправляете переменную $ file.Второй:что-то не так в JS - почему вы используете такое имя переменной msg в data: и в success:?

Я полагаю, что этого можно было ожидать, как отмечает sktrdie.Я не могу проверить прямо сейчас, но если вы подумаете об этом:пользователь, по сути, не получает никаких уведомлений о том, что вы делаете с AJAX.Внезапное получение такого сообщения было бы раздражающим.

Я предполагаю, что если вы создадите (даже скрытый?) iframe на этой странице и перенаправите на этот URL загрузки, вы получите это диалоговое окно.YMMV, HTH.

Я некоторое время не кодировал php, поэтому я не уверен, что в вашем коде что-то не так.Но я думаю, что проблема в вашем подходе.Вам нужно загрузить download.php во фрейме, а не в ответ на вызов ajax.Итак, в основном вам нужно сформировать невидимый iframe в документе и указать на него download.php с параметрами get, добавленными к URL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top