猿问

使用Ajax请求下载文件

使用Ajax请求下载文件

当我点击一个按钮时,我想发送一个“Ajax下载请求”,所以我尝试这样做:

JavaScript:

var xhr = new XMLHttpRequest();xhr.open("GET", "download.php");xhr.send();

php:

<?header("Cache-Control: public");header("Content-Description: File Transfer");header("Content-Disposition: attachment;
 filename= file.txt");header("Content-Transfer-Encoding: binary");    readfile("file.txt");?>

但不能像预期的那样工作,我该怎么办?提前谢谢


蓝山帝景
浏览 3802回答 3
3回答

千巷猫影

来到HTML 5的场景是下载属性..它是支撑在Firefox和Chrome中,很快就会出现IE11。根据您的需要,您可以使用它来代替Ajax请求(或者使用window.location)只要您要下载的文件与您的站点位于同一来源。您可以始终发出Ajax请求/window.location通过使用一些JavaScript测试download支持,如果不支持,则将其切换为window.location.原始答案您不能让Ajax请求打开下载提示符,因为物理上您必须导航到文件以提示下载。相反,您可以使用一个成功函数导航到Dowload.php。这将打开下载提示,但不会更改当前页面。$.ajax({ &nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'download.php', &nbsp;&nbsp;&nbsp;&nbsp;type:&nbsp;'POST', &nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;function()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.location&nbsp;=&nbsp;'download.php'; &nbsp;&nbsp;&nbsp;&nbsp;}});即使这回答了问题,最好还是用window.location并完全避免Ajax请求。

四季花海

实际上,您根本不需要Ajax。如果您只是将“Dowload.php”设置为按钮上的href,或者,如果它不是链接,则使用:window.location&nbsp;=&nbsp;'download.php';浏览器应该识别二进制下载,而不是加载实际页面,而只是作为下载文件。
随时随地看视频慕课网APP
我要回答