当前位置: 首页 > 面试题库 >

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

何烨华
2023-03-14
问题内容

我正在将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并将其保存到’grid.csv’,因此它可以完美地工作。问题在于它不会提示用户保存文件。这是我的PHP标头有问题还是我需要在$
.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();

PS您的PHP代码实际上并没有将CSV回显到屏幕上,只是将其保存到文件中。

标头调用后,请确保您具有:

readfile($myfile);


 类似资料:
  • 问题内容: 我在控制器中有这个: 我想从: 如何通过使用Ajax调用来提交此信息我需要让此表单提交的JQuery ajax调用。 而且我想确保数据类型,谢谢 问题答案: 试试这个

  • 问题内容: 我有一个按钮,它将调用ajax函数。 这是我的ajax功能 我根据用户输入创建csv文件。创建之后,我希望它提示下载或强制下载(最好是强制)。我在php文件的末尾使用以下脚本来下载文件。如果我在单独的文件中运行此脚本,则可以正常运行。 但是,如果我在csv.php的末尾运行它,它会将file.csv的内容输出到页面中(进入ajaxDiv)而不是下载。 有没有办法强制在csv.php的末

  • 本文向大家介绍PHP 通过AJAX调用下载文件,包括了PHP 通过AJAX调用下载文件的使用技巧和注意事项,需要的朋友参考一下 使用Ajax下载文件不是一个好主意。而是应使用window.location 或 document.location。 “window.location”具有以下特点- 需要启用JavaScript 它不需要PHP。 它有助于显示站点的内容,并在几秒钟后重定向用户。 重定

  • 问题内容: 我正在这样发出Ajax请求: 在服务器端,我完成了一些如下代码: Ajax POST可以正常工作。我可以在mozilla的Web开发人员工具中看到,但是页面没有像我想象的那样重定向到其他页面。谁能告诉我我做错了什么? 还是无法通过Ajax 打电话? 问题答案: 是的,据我所知,您不能简单地从客户端检测重定向。 您可以做的一件事就是如何返回指示从服务器端代码进行重定向的内容。类似于以下J

  • 问题内容: 我写了一个wordpress插件,在模板中添加了一些注释功能。通过ajax,所有内容都应传输到wordpress数据库中。 问题是-ajax处理程序需要一个php文件,用于通过捕获查询 在用户传输查询时,ajax处理程序将如下所示调用php文件: 该 getvars.php 不知道WordPress的环境,因为它是由用户直接调用提交,我想补充的WordPress的环境类,包括是不是好作

  • 我有个问题,希望你能帮助我。我的控制器中有一个创建CodeIgniter会话的方法。为确保创建正确,我在创建会话后执行函数。然后,在我的Ajax请求中,我放置了一个以刷新页面。 这就是我的方法: 这种方法称为槽式Ajax,如; 最后,在Ajax请求中,我做了,但是当页面刷新时,这将把我重定向到,并且当我想检查包含