繁体   English   中英

如何使用PHP通过AJAX调用将CSV文件发送给用户?

[英]How to use PHP to send a CSV file to a user through an AJAX call?

我有一个PHP文件dataAPI.php ,它返回一个序列化为JSON或CSV(我正在尝试实现)的数据数组。 只能通过AJAX调用来访问dataAPI.php ,到目前为止,它对JSON数据的运行效果很好。

问题是,我想在客户端也有一个导出按钮,单击该按钮将发送另一个AJAX调用,以返回以CSV格式序列化的相同数据。 我知道我无法通过AJAX发送文件,那么我该怎么做呢?

我曾考虑过在服务器端创建CSV文件,然后发送重定向URL作为对我的AJAX请求的响应。 如果执行此操作,如何防止两个请求覆盖彼此的其他文件并删除已访问/旧的csv文件? 有没有更好的办法? 任何帮助表示赞赏。

在这两种情况下,您都可以尝试返回JSON,但CSV版本将返回具有一个值的JSON对象-包含CSV数据的长字符串。

1)对于AJAX调用,请在服务器上的某个位置创建文件并发送回链接-然后可以将该链接重定向到(例如,在子窗口中)或单击...。

2)为防止数据被不同的请求覆盖,请在服务器端创建一个唯一的文件名(例如,使用uniq_id()函数)。 您仍然可以使用具有header()标记的相同文件名发送它们。 确保确定不再需要这些文件后,请确保将其删除(我个人使用如下的内务处理脚本:

$timeout = 43200; // Max age in seconds
$cleanPaths = array("ps_files/"); // The directory to autoclean

foreach ($cleanPaths as $URLPath) {
    if ($handle = opendir($URLPath)) {
        while (false !== ($file = readdir($handle))) {
            if ((substr($file, 0, 1) !== ".") && ((time() - filectime($URLPath . $file)) >= $timeout)) {
                unlink($URLPath . $file);
            }
        }
    }
}

您可以将以下代码放入文件中,然后向其发送xhr请求以调用该文件。 或者,您可以尝试使用一个单独的工具打开该文件,而不会弹出。

$result = mysql_query("SHOW COLUMNS FROM `$table`");
$i = 0;
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
       $csv_output .= $row['Field'].", ";
       $i++;
    }
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM `$table`");
while ($rowr = mysql_fetch_row($values)) {
    for ($j=0;$j<$i;$j++) {
        $csv_output .= $rowr[$j].", ";
    }
    $csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM