问题描述
我想完成我的网站一个相当简单的任务,但我不能确定究竟该如何去做。我希望用户可以查看表格,然后点击一个按钮,此时用户可以在表中的内容保存为一个CSV文件。这个请求有时可以是相当复杂的,所以我产生一个进度页面,提醒用户。
I'm trying to accomplish a fairly simple task for my website, but I"m not sure exactly how to go about it. I want the user to be viewing a table, then click a button, at which point the user can save the contents of that table as a csv file. This request can sometimes be quite complicated so I generate a progress page to alert the user.
我的大多数事情想通了,但实际产生的csv文件。 (我使用jQuery和PHP)
I have most things figured out except actually generating the csv file. (I use jQuery and PHP)
在点击了jQuery code运行:
the jQuery code run on click:
hmis_query_csv_export: function(query_name) {
$.uiLock('<p>Query Loading.</p><img src="/images/loading.gif" />')
$.get({
url: '/php_scripts/utils/csv_export.php',
data: {query_name: query_name},
success: function(data) {
$.uiUnlock();
}
});}
相关PHP:
the relevant PHP:
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=search_results.csv");
//
//Generate csv
//
echo $csvOutput
exit();
这样做是将文本作为PHP文件,但它不会生成一个下载。我究竟做错了什么?
What this does is sends the text as the PHP file, but it's doesn't generate a download. What am I doing wrong?
推荐答案
如果您强制下载,你可以将当前页面重定向到下载链接。由于该链路将产生下载对话框,当前页(及其状态)将被保持在适当位置。
If you are forcing a download, you can redirect the current page to the download link. Since the link will generate a download dialog, the current page (and its state) will be kept in place.
基本方式:
$('a#query_name').click(function(){
$('#wait-animation').show();
document.location.href = '/php_scripts/utils/csv_export.php?query_name='+query_name;
$('#wait-animation').hide();
});
更复杂的:
$('a#query_name').click(function(){
MyTimestamp = new Date().getTime(); // Meant to be global var
$('#wait-animation').show();
$.get('/php_scripts/utils/csv_export.php','timestamp='+MyTimestamp+'&query_name='query_name,function(){
document.location.href = '/php_scripts/utils/csv_export.php?timestamp='+MyTimestamp+'&query_name='+query_name;
$('#wait-animation').hide();
});
});
在PHP脚本:
At PHP script:
@header("Last-Modified: " . @gmdate("D, d M Y H:i:s",$_GET['timestamp']) . " GMT");
@header("Content-type: text/x-csv");
// If the file is NOT requested via AJAX, force-download
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
header("Content-Disposition: attachment; filename=search_results.csv");
}
//
//Generate csv
//
echo $csvOutput
exit();
网址为请求必须是相同的,以欺骗浏览器不启动在 document.location.href
一个新的下载,但保存副本缓存。我不能完全肯定,但似乎pretty的有前途的。
The URL for both requests must be the same to trick the browser not to start a new download at document.location.href
, but to save the copy at the cache. I'm not totally sure about it, but seems pretty promising.
这篇关于AJAX&QUOT;使用&QUOT下载的CSV文件;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!