[英]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.