AJAX"使用&QUOT下载的CSV文件; [英] Download CSV file using "AJAX"

查看:156
本文介绍了AJAX"使用&QUOT下载的CSV文件;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想完成我的网站一个相当简单的任务,但我不能确定究竟该如何去做。我希望用户可以查看表格,然后点击一个按钮,此时用户可以在表中的内容保存为一个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文件;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆