Going slightly crazy here. I'm making an Ajax call using jQuery.post as follows:
$.post('php/print.php',{data:dS},function(res){... },"text");
I'm returning from print.php (as a test):
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>";
The data is coming through fine according to Firebug, including the headers. But how do I get the browser (Firefox, in this instance) to prompt the user to save an attachment?
Thanks.
It's simply not possible. AJAX requests never cause user prompts.
However, you can simply make the request return e.g. JSON or plaintext containing the URL and then use location.href = ...;
to redirect to it; this will result in the prompt you are looking for.
If the request always results in a file download, you could also consider using a regular form and not using AJAX at all; if the response triggers a download dialog the previous page will remain in the browser window anyway.
Why you do not link straight to print.php
and call php output to the browser using this code
$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);