Pushing Headers и AJAX - PullRequest
       10

Pushing Headers и AJAX

1 голос
/ 09 января 2009

У меня есть скрипт, который вызывает загрузку, и я звоню на это через 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.

EDIT:

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

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

Ответы [ 4 ]

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

Это не показывает диалоговое окно для самого факта, что это вызов 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>
0 голосов
/ 09 января 2009

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

0 голосов
/ 09 января 2009

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

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

0 голосов
/ 09 января 2009

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

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