首页 > web前端 > js教程 > 为什么 AJAX 不适用于文件下载,最好的替代方案是什么?

为什么 AJAX 不适用于文件下载,最好的替代方案是什么?

Barbara Streisand
发布: 2024-12-09 17:50:12
原创
591 人浏览过

Why Doesn't AJAX Work for File Downloads, and What's the Best Alternative?

使用 AJAX 请求下载文件:综合指南

问题:尝试发起“ajax 下载请求”单击按钮后不会产生所需的结果。下面提供了 JavaScript 和 PHP 的演示:

JavaScript:

var xhr = new XMLHttpRequest();
xhr.open("GET", "download.php");
xhr.send();
登录后复制

PHP (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");
?>
登录后复制

上面的代码没有按预期运行。您能否提供有关解决此问题的必要步骤的见解?

解决方案:

通过 AJAX 请求启动文件下载是不可行的。对于此任务,需要直接访问该文件。

更新的解决方案(2015 年 4 月 27 日):

使用“下载”属性:

  • HTML5 引入了“下载”属性。它受到 Firefox 和 Chrome 的支持,并且很快将被包含在 IE11 中。它允许在同源直接下载文件。

JavaScript:

// Check if 'download' is supported
if ('download' in HTMLAnchorElement.prototype) {
    // Create an anchor element
    var anchor = document.createElement('a');

    // Set 'download' attribute and file URL
    anchor.download = 'file.txt';
    anchor.href = 'download.php';

    // Trigger file download
    anchor.click();
} else {
    // Fallback to previous method
    window.location = 'download.php';
}
登录后复制

原始解决方案:

使用'window.location':

  • 与 AJAX 请求不同,'window.location' 直接导航到文件,触发下载。

JavaScript :

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

为了简单起见,建议避免完全使用 AJAX 请求,只需使用“window.location”即可。

以上是为什么 AJAX 不适用于文件下载,最好的替代方案是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板