javascript - 使用 ajax 和 php 下载文件 - readfile 不工作

标签 javascript php jquery ajax

我想将一个值保存到一个 txt 文件并将其下载给用户。

现在,值被正确地打印到 txt 文件中,但是没有触发 readfile 函数,因此没有开始下载。

php,此代码与ajax调用位于同一页面上。

<?php 
if (isset($_POST['data']))
{
$handle = fopen("file.txt", "w");
fwrite($handle, $_POST['data']);
fclose($handle);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename('file.txt'));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('file.txt'));
readfile('file.txt');    
exit;   

}

?>

javascript,没有url,因为数据要发送到当前页面。

 function exportColors() {        
    var exportData = this.dataset.id;

    $.ajax({
            type: "POST",
            data: {data: exportData},
            success: function (data) {
               console.log(data);   
            }   
        });


}

最佳答案

您需要分离功能,即先将数据发布到 PHP,保存文本文件的内容,然后在第二个 请求中让用户下载文件。因此,一种(骨架)方法是:

JS 文件:

function exportColors() {        
    var exportData = this.dataset.id;

    $.ajax({
        type: "POST",
        data: {data: exportData},
        success: function (data) {
            // redirect or print out a link
        }   
    });

第一个请求的 PHP 文件(保存内容):

<?php 
if (isset($_POST['data'])) {
    $handle = fopen("file.txt", "w");
    fwrite($handle, $_POST['data']);
    fclose($handle);
    // give back some unique id or the unique filepath
}
?>

第二个请求的 PHP 文件(无论是通过点击链接还是在重定向之后):

// essentially everything that outputs your file
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename('file.txt'));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize('file.txt'));
readfile('file.txt');    
exit;   

评论: 返回一个唯一的文件路径或通过数据库的句柄(更安全,但也更复杂)。另外,为什么用户要下载他之前提交的没有变化的数据呢?除了表面上看,还有更多内容吗?

关于javascript - 使用 ajax 和 php 下载文件 - readfile 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34284428/

相关文章:

php - 服务器接收到作为二维码扫描器的客户端手机的二维码扫描结果后,如何将查询结果显示在php页面上

javascript - 在字符串中传递的 HTML 标签无法正常渲染

jquery - 包装/masonry 网格全宽

javascript - Jquery - 超过 1 个 "$(document).ready"= 脏代码?

Javascript RegExp - 从字符串中提取电话号码

Javascript/Jquery-现有两个数组的新数组

php - WP $post 对象可以从主题文件输出为 REST-API 格式的 JSON 吗?

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

javascript - $.post() 的第三个参数不起作用

javascript - 当我仅通过变量调用嵌套函数时,为什么会执行嵌套函数?