1 回答
TA贡献1803条经验 获得超6个赞
你误解了 XMLHttpRequest 的用途,它主要用于反应性,例如当我们想要加载由 php 生成的列表而无需重新加载页面时,
你可以用它来实现它,但因为你不需要它,一个简单的方法是打开一个 _blank 窗口到你提供的链接,这样你的函数看起来像
function downloadGPXfile(fn) {
let script = `downloadGPXfile.php?filename=${fn}`;
window.open('http://website/downloadGPXfile.php?filename=' + fn, '_blank');
}
下载对话框显示后,窗口关闭,因此您的 php 看起来像
<?php
$dir = 'download/';
$file = $_GET['filename'];
$fqn = $dir . $file;
$fileSize = filesize($fqn);
header("Content-Type: text/xml");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Length: $fileSize");
readfile($fqn);
echo "
<script>
window.close();
</script>";
?>
如果这对您不起作用,但为了清楚起见,窗口将显示最多 1 秒然后关闭,您可以使用
function downloadGPXfile(fn) {
let fileurl = `http://website/downloadGPXfile.php?filename=${fn}`;
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var downloadUrl = URL.createObjectURL(xhttp.response);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = downloadUrl;
a.download = "";
a.click();
}
};
xhttp.open("GET", fileurl, true);
xhttp.responseType = "blob";
xhttp.send();
}
你看你需要刺激就像用户点击了一个有对象的
- 1 回答
- 0 关注
- 78 浏览
添加回答
举报