为什么JS打开txt文件而不是下载?

时间:2016-11-06 05:28:30

标签: javascript php jquery ajax

这是我的代码:

服务器端:

(...)

客户端:

public function export(){
    $arr = array();
    if($_POST["type"] == "save"){
        $name = "export.txt";
        file_put_contents("$name",$_POST["text"]);
        $arr["type"] = "link";
        $arr["url"] = "http://localhost:8000/{$name}";
    }
    return $arr;
}

当我点击$(document).on('click', '#export', function () { var names = ["سعید خرمی", "فرید هادوی"]; var namess = names.join('\n'); $.ajax({ type: "post", url: "/export", headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }, data: { type: "save", text: namess }, dataType: "json", success: function(data){ var href = data.url; window.location = href; } }); }) (按钮)时,会打开#export文件(而不是下载)。像这样:

enter image description here

注意我使用的是Chrome ..它也不能在其他浏览器中使用。

如何强制下载.txt文件?

1 个答案:

答案 0 :(得分:2)

像这样改变你的成功部分,

success: function(data){
var href = download.php?filename=export.txt;
window.location = href;
}

在你的download.php中:

从GET变量filename获取文件名(例如$file)。

发送标题:

<?php
$file = $_GET['filename']; // get the filename
if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: text/plain'); // the appropriate header type for txt file
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
    exit;
}
?>

来源:PHP Readfile Documentation