我试图在点击按钮时强制下载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上测试了两种方式。
答案 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))))