ajax / php文件下载不起作用?

时间:2012-12-07 22:55:15

标签: php javascript ajax download

我试图在点击按钮时强制下载txt文件。内容是动态生成的,存储在javascript变量中。单击按钮时,下载窗口不会出现,但ajax调用成功。我做错了什么?

php:

<?php
$Proof = $_REQUEST["Proof"];
$proof = stripslashes($Proof);
$file = 'savedproof.txt';
file_put_contents($file, $proof);
header('Content-disposition: attachment; filename="'.$file.'"');
header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Content-Description: File Transfer');

readfile($file);
?>

javascript:

$("#save").click(function () {

    var proof = $("#main").html();
     $.ajax({ 
             type: 'POST', 
             url: 'save-to-file.php',
             data: {Proof: Proof},
             dataType: "html"

            });
}

或者我尝试使用window.location.href,但我无法将变量Proof传递给php文件。 我试过这样的事情:

window.location.href ="download.php?Proof="+Proof;

虽然出现了下载对话框,但只有变量Proof的开头部分在文件中。 我在firefox和chrome上测试了两种方式。

3 个答案:

答案 0 :(得分:3)

由于安全问题,Javascript无法将文件下载到客户端计算机。

只需将按钮设为链接(无论您想要的样式),然后执行以下操作:

<a id="save" href='/path/to/download.php' target="_blank"></a>

然后有一个onready函数根据href

的值更改#main
$.ready(
   var proof = $('#main').html();
   var href = $('#save').attr('href') + '?Proof=' + encodeURIComponent(proof);
   $('#save').attr('href', $href); 
});

据我所知,这里根本就没有AJAX的理由。

答案 1 :(得分:1)

您的AJAX请求无效,因为它未触发浏览器导航。它只是反馈Javascript,这是忽略它。您可能需要构建一个假的<form>元素并提交它以获取要下载的结果。

window.location.href而言,网址通常限制在2到4 KB左右,因此您会被切断。所以这不会奏效。

答案 2 :(得分:0)

您可以通过jquery创建和发送表单(页面未重新加载)来执行此操作:

unique(lapply(A, function(x) sort(unlist(x))))