使用 ajax 请求下载文件

2022-08-30 05:32:19

我想在单击按钮时发送“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");
?>

但不能按预期工作,我该怎么办?提前感谢您


答案 1

更新于 2015 年 4 月 27 日

HTML5 场景的出现和即将到来的是下载属性。它在Firefox和Chrome中受支持,并且很快就会进入IE11。根据您的需要,只要您要下载的文件与您的网站位于同一源,就可以使用它而不是AJAX请求(或使用)。window.location

您始终可以使用一些JavaScript来测试是否支持AJAX请求/回退,如果不支持,则将其切换到调用。window.locationdownloadwindow.location

原始答案

不能让 AJAX 请求打开下载提示,因为您必须实际导航到该文件才能提示下载。相反,您可以使用成功函数导航到下载.php。这将打开下载提示,但不会更改当前页面。

$.ajax({
    url: 'download.php',
    type: 'POST',
    success: function() {
        window.location = 'download.php';
    }
});

即使这回答了问题,最好只使用并完全避免AJAX请求。window.location


答案 2

要使浏览器下载文件,您需要像这样发出请求:

 function downloadFile(urlToSend) {
     var req = new XMLHttpRequest();
     req.open("GET", urlToSend, true);
     req.responseType = "blob";
     req.onload = function (event) {
         var blob = req.response;
         var fileName = req.getResponseHeader("fileName") //if you have the fileName header available
         var link=document.createElement('a');
         link.href=window.URL.createObjectURL(blob);
         link.download=fileName;
         link.click();
     };

     req.send();
 }