Как jQuery.post () работает с Content-Disposition: вложением? - PullRequest
1 голос
/ 15 марта 2012

Схожу немного с ума здесь. Я делаю Ajax-вызов с использованием jQuery.post следующим образом:

  $.post('php/print.php',{data:dS},function(res){...  },"text");

Я возвращаюсь из print.php (как тест):

header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=test.doc");

echo "<html>";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
echo "<body>";
echo "Testing-2-3!";
echo "</body>";
echo "</html>";

Данные поступают нормально в соответствии с Firebug, включая заголовки. Но как мне заставить браузер (в данном случае Firefox) предложить пользователю сохранить вложение?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 15 марта 2012

Это просто невозможно. AJAX-запросы никогда не вызывают пользовательских запросов.

Однако вы можете просто сделать запрос на возврат, например, JSON или обычный текст, содержащий URL, а затем используйте location.href = ...; для перенаправления на него; в результате вы получите запрос, который вы ищете.

Если запрос всегда приводит к загрузке файла, вы также можете рассмотреть возможность использования обычной формы и вообще не использовать AJAX; если ответ вызывает диалог загрузки, предыдущая страница все равно останется в окне браузера.

0 голосов
/ 15 марта 2012

Почему вы не ссылаетесь прямо на print.php

и вызовите вывод php в браузер, используя этот код

$fp = fopen("php://output", 'w');
header("Content-type: application/vnd.ms-word");
header("Content-Disposition: attachment;Filename=test.doc");
$fp = fopen("php://output", 'w');
fwrite($fp,"your content here");
fclose($fp);
...