第一件事:
用户提交"运行系统",我发送到 php 功能systemid用户使用 ajax 运行什么,该功能将数据收集到数组中使用json返回数组到jquery。 - 这很棒
第二件事
返回的数据我需要发送到函数将数组转换为 xls / csv ,该函数还返回系统名称。 - 也有效
Finnally
我使用window.location.href = '/index.php?/system/download/'+url;
开始下载,但在下载的文件中没有数据。
这是客户端代码:
$(".systemform").submit(function(e) {
var sysid = $(".sysid:checked").val();
$.ajax({
type: "POST",
url: '/index.php?/system/system_options/export',
data: { system : sysid },
dataType:"json",
success: function(data)
{
$(".exportsys").removeAttr("disabled");
$(".exportsys").removeAttr("title");
//now user can export data
$(".exportsys").click(function(e){
//alert(JSON.stringify(data)); works
$.ajax({
type:"POST",
url: '/index.php?/system/downloadcsv',
data: { exportarr : data }, //send array
dataType:"json",
success: function(response){
var url = response.url; //i get system name
window.location.href = '/index.php?/system/download/'+url; //now download start, but file is empty because data is not sended
},
error: function(xhr, textStatus, error){
alert(error);
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}
})
})
},
error: function(xhr, textStatus, error){
console.log(xhr.statusText);
console.log(textStatus);
console.log(error);
}
});
e.preventDefault(); // avoid to execute the actual submit of the form.
});
和服务器端(注意:我正在使用 codeignitier ),这是在同一个控制器中:
public function downloadcsv(){
//var_dump($this->export_arr);
if(isset($_POST['exportarr'])){
$exportarr = $_POST['exportarr'];
$filename = $exportarr[0]['System'] . date('Ymd') . ".xls";
//echo $filename;
echo json_encode(array('url'=>$filename));
$data = $exportarr;
$flag = false;
foreach($data as $row) {
if(!$flag) {
// display field/column names as first row
implode("\t", array_keys($row)) . "\r\n";
$flag = true;
}
array_walk($row, 'cleanData');
implode("\t", array_values($row)) . "\r\n";
//print_r($data);
}
}
exit;
}
public function download($filename){
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");
header("Content-Type: text/plain");
}