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接受这个文件然后再下载。但是下面的一直提示: ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/0f4bbf15b2e807b342f8dc0250361148.png) $.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("完成") } });

阅读量:185

点赞量:0

问AI
jQuery 版本太老了,v3.x 之前不支持 Blob、ArrayBuffer,居然还在用 1.12。 要么升级,要么别用 $.ajax 而是自己单独写个方法。