嗨,我有大部分代码,但我错过了文件的“弹出式”,所以我正在寻求帮助。
功能如下:用户填写报告表格,报告显示在屏幕上,用户有一个按钮,最后选择点击它以xls下载报告并在本地保存。
我已将xls添加为php,以便我可以<table><tr><td></td><tr></table>
返回电子表格
AddType application/x-httpd-php .xls
在许多情况下这是相当危险的,但在我的情况下它是必不可少的(“电子表格”在内存中太大而不能以HTML伪方式发送)所以即使这给用户“你确定“在excel中,它是迄今为止最不好的选择。
好的,除了离题之外,我希望jQuery
按钮post
将数据发送到response.xls
,然后“下载”该文件,就好像它是一个链接,这实际上更难比我想象的还要另一个选择是获取整个字符串,但这对我来说太不优雅了。
这是我到目前为止所拥有的。
<button id="download">Download As Excel</button>
<script type="text/javascript">
$(document).ready(function () {
$('#download').button();
$('#download').click(function(){
$.post("response.xls",
$("form#sendform").serialize(),
function(data){
alert(data);
var win=window.open('about:blank');
with(win.document) {
open();
write(data);
close();
}
}
);
return false;
});
});
</script>
关键部分是,这可以通过重新序列化用户已经选择的预先存在的选项来实现。它可以工作:但是它在弹出窗口中以“html”打开文件 - 这是错误的我需要它下载它就好像它是一个链接。
任何想法都会受到欢迎。请注意,我经常使用这个技巧,但它总是一个没有参数的静态xls文件(通常是<a href=\"report.xls\">Main Report</a>
的情况) - 所以这是明显不同的
答案 0 :(得分:1)
下面的代码可以使用,你不能以上面列出的方式使用$ .post你必须通过假冒伪造的html表单并提交它来“the old way
”这样做
$('#download').click(function(){
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", "response.xls");
form.setAttribute("target", "_blank");
$('form#sendform *').filter(':input').each(function(){
if (typeof $(this).attr('name') != "undefined"){
var hiddenField = document.createElement("input");
hiddenField.setAttribute("name", $(this).attr('name'));
hiddenField.setAttribute("value", $(this).val());
form.appendChild(hiddenField);
}
});
form.style.visibility="hidden";
document.body.appendChild(form);
form.submit();
return false;
});
答案 1 :(得分:0)
你可以试试这个,记得在你的服务器上输入数据:
<button id="download">Download As Excel</button>
<script type="text/javascript">
$(function () {
var btn = $('#download');
btn.click(function(){
btn.prop('disabled', true);
$.post("response.xls", $("form#sendform").serialize(),
function(data){
//data === base64'ified xsl
location.href = 'data:application/vnd.ms-excel;base64,' + data;
}
);
return false;
});
});
</script>