一尘不染

JavaScript使用ajax请求下载文件

javascript

当我单击按钮时,我想发送“ ajax下载请求”,因此我尝试了这种方式:

javascript:

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

download.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");
?>

但是没有按预期工作,我该怎么办?先感谢您


阅读 2466

收藏
2020-04-25

共1个答案

一尘不染

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

您始终可以window.location通过使用一些JavaScript来测试是否download支持AJAX请求/回退,如果不支持,则将其切换为call window.location

原始答案

由于您实际上必须导航至文件以提示下载,因此您无法让AJAX请求打开下载提示。相反,您可以使用成功函数来导航到download.php。这将打开下载提示,但不会更改当前页面。

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

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

2020-04-25