问题
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.
回答1:
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.
回答2:
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);
来源:https://stackoverflow.com/questions/9718102/how-does-jquery-post-deal-with-content-disposition-attachment