php中生成了一个excel文件,用ajax怎么接受?
下面是一个生成excel的接口,我直接在浏览器上请求接口,会直接叫我下载一个excel文件。
public function index()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 设置单元格的值
foreach ($this->tableHeader as $k=>$v){
$chr=chr(65+$k);
$sheet->setCellValue($chr."1", $v);
}
foreach ($this->tableData as $k=>$v){
$vArr=array_values($v);
foreach (array_keys($v) as $k2=>$v2){
$chr2=chr(65+$k2).($k+2);
$sheet->setCellValue($chr2, $vArr[$k2]);
}
}
// 保存Excel文件到临时目录
$writer = new Xlsx($spreadsheet);
$tempFilename = tempnam(sys_get_temp_dir(), $this->fileName);
$writer->save($tempFilename);
// 设置HTTP头信息,提供文件下载
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment;filename=$this->fileName.xlsx");
header('Cache-Control: max-age=0');
// 读取临时文件并输出到浏览器
$file = fopen($tempFilename, 'rb');
fpassthru($file);
fclose($file);
// 删除临时文件
unlink($tempFilename);
}
但是我现在需要用ajax接受这个文件然后再下载。但是下面的一直提示:
$.ajax({
url: "/portal/AdminLog/homeExcel",
type: 'POST',
dataType: 'json',
xhrFields: {
responseType: 'blob' // 设置响应类型为JSON
},
data: {
"startTime":$('input[name="startTime"]').val(),
"endTime":$('input[name="endTime"]').val()
},
success: function (blob, status, xhr) {
console.log("成功")
// 创建一个指向 Blob URL 的链接
var url = window.URL.createObjectURL(blob);
// 创建一个新的 a标签用于下载
var a = document.createElement('a');
a.href = url;
a.download = 'filename.ext'; // 设置下载文件的名称
// 触发下载
document.body.appendChild(a);
a.click();
// 清理
window.URL.revokeObjectURL(url);
document.body.removeChild(a);
},
error: function () {
console.log("失败")
},
complete: function () {
console.log("完成")
}
});
回复
1个回答
test
2024-06-20
jQuery 版本太老了,v3.x 之前不支持 Blob、ArrayBuffer,居然还在用 1.12。
要么升级,要么别用 $.ajax 而是自己单独写个方法。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容