当我点击一个按钮时,我想发送一个"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");
?>
但是没有像预期的那样工作,我该怎么做?提前谢谢你
发布于 2017-03-16 00:49:47
要让浏览器下载文件,您需要发出如下请求:
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();
}
发布于 2013-12-30 05:46:48
为此,您实际上根本不需要ajax。如果您只是将"download.php“设置为按钮上的href,或者,如果它不是一个链接,请使用:
window.location = 'download.php';
浏览器应该识别二进制下载,而不是加载实际的页面,而只是将文件作为下载提供。
发布于 2018-04-05 22:05:08
跨浏览器解决方案,在Chrome,Firefox,Edge,IE11上测试。
在DOM中,添加一个隐藏的链接标记:
<a id="target" style="display: none"></a>
然后:
var req = new XMLHttpRequest();
req.open("GET", downloadUrl, true);
req.responseType = "blob";
req.setRequestHeader('my-custom-header', 'custom-value'); // adding some headers (if needed)
req.onload = function (event) {
var blob = req.response;
var fileName = null;
var contentType = req.getResponseHeader("content-type");
// IE/EDGE seems not returning some response header
if (req.getResponseHeader("content-disposition")) {
var contentDisposition = req.getResponseHeader("content-disposition");
fileName = contentDisposition.substring(contentDisposition.indexOf("=")+1);
} else {
fileName = "unnamed." + contentType.substring(contentType.indexOf("/")+1);
}
if (window.navigator.msSaveOrOpenBlob) {
// Internet Explorer
window.navigator.msSaveOrOpenBlob(new Blob([blob], {type: contentType}), fileName);
} else {
var el = document.getElementById("target");
el.href = window.URL.createObjectURL(blob);
el.download = fileName;
el.click();
}
};
req.send();
https://stackoverflow.com/questions/20830309
复制相似问题