我想从Ajax查询中激活下载窗口。
当我点击页面上的按钮时,会启动Ajax查询。
这是Ajax查询(单击按钮时调用的函数):
function exportDetailOuvrage(idData){
$.ajax({
url : 'ouvrage.php',
type : 'POST',
data : { typeOuvrage : idData },
success : function (data){
$('body').append(data);
}
});
}
以下是生成CSV的PHP代码:
<?php
$csv = "Town;Name;Code\r\n" ;
foreach($result as $row){
$csv .= $row['town'].";".$row['name'].";".$row['code']."\r\n" ;
}
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=data.csv");
echo $csv;
?>
在PHP代码中,$result
是一个基于数据库中SQL查询构建的数组。
CSV字符串按需生成,服务器答案为200(使用firebug无错误)。我检查了发送的参数和返回的CSV字符串:每次都没问题。
唯一的问题是没有下载窗口,也没有保存data.csv文件......
我想知道我的Ajax代码,尤其是success
参数的内容是否良好。我不知道该把这个参数放在什么内容。
编辑:
根据@MonkeyZeus的回答和评论,这是我gimme_file.php
的内容:
<?php
session_start();
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=data.csv");
readfile($_SESSION['I_CAN_DOWNLOAD_ONLY_THIS']);
exit;
?>
我在data.csv
下载的文件中收到以下错误消息:
<br />
<b>Notice</b>: Undefined index: I_CAN_DOWNLOAD_ONLY_THIS in <b>D:\STAT\modele\gimme_file.php</b> on line <b>7</b><br />
<br />
<b>Warning</b>: readfile(): Filename cannot be empty in <b>D:\STAT\modele\gimme_file.php</b> on line <b>7</b><br />
答案 0 :(得分:3)
Javascript(jQuery)绝对可以 NOT 触发文件下载;这将是一个巨大的安全问题。
您必须做的是以下内容:
success:
回拨window.location
将浏览器重定向到CSV文件如果我的帖子非常简洁,我很抱歉,但我只是不想让你在数小时内追逐你的尾巴试图获得一些基本上被网络浏览器阻止的东西。
<强>的jQuery 强>
function exportDetailOuvrage(idData){
$.ajax({
url : 'ouvrage.php',
type : 'POST',
data : { typeOuvrage : idData },
success : function (data){
window.location = 'http://www.mywebsite.com/gimme_file.php';
}
});
}
<强> ouvrage.php 强>
<?php
session_start();
$csv = "Town;Name;Code\r\n" ;
foreach($result as $row){
$csv .= $row['town'].";".$row['name'].";".$row['code']."\r\n" ;
}
$filename = 'ouvrage_'.uniqid('', TRUE).'.csv';
file_put_contents($filename, $csv);
$_SESSION['I_CAN_DOWNLOAD_ONLY_THIS'] = $filename;
?>
<强> gimme_file.php 强>
<?php
session_start();
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=data.csv");
readfile($_SESSION['I_CAN_DOWNLOAD_ONLY_THIS']);
exit;
?>