javascript - 使用 ajax 请求下载文件

标签 javascript php ajax file download

我想在点击一个按钮的时候发送一个“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");
?>

但没有按预期工作,我该怎么办?提前谢谢你

最佳答案

2015 年 4 月 27 日更新

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

您始终可以使用 some JavaScript 将 AJAX 请求/window.location 作为后备。测试是否支持download,如果不支持,切换到调用window.location

原答案

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

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

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

关于javascript - 使用 ajax 请求下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830309/

相关文章:

php - 使用 mysqli_insert_id() 有多安全,如果不安全,我应该使用什么?

jquery - 如何使用 jQuery 模糊事件向 Perl 脚本发出 AJAX 请求?

javascript - 正则表达式代码在 Internet Explorer 上不起作用

javascript - 当用户点击某个按钮时存储用户的电子邮件

php - 主干获取对象

javascript - GetElementByID 与 textarea

javascript - 使用 jquery ajax 中选择的 Jquery

javascript - 如何获取 ID 集合以及从 View 表传递到 Controller 的选定下拉列表值?

javascript - 我们如何在 three.js 中创建海龟几何图形?

javascript - 是否可以使用 JQuery 或 JavaScript 更改窗口大小?