gpt4 book ai didi

php - 通过 AJAX 调用提示用户保存文件

转载 作者:可可西里 更新时间:2023-11-01 12:46:13 27 4
gpt4 key购买 nike

我正在将我的 DHTMLX 网格导出到 csv,并且已经成功地创建了 .CSV 文件。我遇到的问题是它没有提示用户保存/打开文件。我正在使用来自 javascript 的 $.post 调用将 CSV 字符串发送到 PHP,然后将该字符串写入 csv。由于某种原因,它没有为用户创建提示,但它成功地写入文件并保存在服务器上。下面是相关代码:

JS:

myGrid.csvParser = myGrid.csvExtParser;
myGrid.setCSVDelimiter('|');
myGrid.csv.row = "endOfRow";
var gridCsvData = myGrid.serializeToCSV();

$.post(
"data/export.php",
{
csvdata: gridCsvData
}
);

PHP(export.php):

$csvData = $_REQUEST['csvdata'];

$csv = explode('endOfRow',$csvData);

$myfile = "grid.csv";

$fh = fopen($myfile, 'w') or die("can't open file");

foreach($csv as $line) {
fputcsv($fh, explode('|',$line),',','"');
}

fclose($fh);

//Redirect output to a client's web browser (csv)
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=grid.csv");
header("Pragma: no-cache");
header("Expires: 0");

从这个意义上说,这段代码工作得很好,它完全按照我想要的方式导出网格并将其保存到“grid.csv”。问题是它没有提示用户保存文件。这是我的 PHP header 的问题,还是我需要在 $.post 中添加一些内容以提示成功?感谢您的帮助!

最佳答案

您不能提示用户通过 AJAX 调用下载文件。您可以做的一件事是制作一个 iFrame,在其中放入一个表单,然后发布它。这样,它看起来就像一个 AJAX 调用,但系统会提示用户下载该文件。

// Create iFrame
var iframe = document.createElement('iframe');
iframe.style.display = "none";
document.body.appendChild(iframe);

// Get the iframe's document
var iframeDoc = iframe.contentDocument || iframe.contentWindow.document;

// Make a form
var form = document.createElement('form');
form.action = 'data/export.php'; // Your URL
form.method = 'POST';

// Add form element, to post your value
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'csvdata';
input.value = gridCsvData; // Your POST data

// Add input to form
form.appendChild(input);

// Add form to iFrame
// IE doesn't have the "body" property
(iframeDoc.body || iframeDoc).appendChild(form);

// Post the form :-)
form.submit();

附言您的 PHP 代码实际上并没有将 CSV 回显到屏幕上,它只是将它保存到一个文件中。

在 header 调用之后,确保您有:

readfile($myfile);

关于php - 通过 AJAX 调用提示用户保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12098178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com