原因:
Ajax下载文件的这种方式本来就是禁止的。出于安全因素的考虑,javascript是不能够保存文件到本地的,所以ajax考虑到了这点,只是接受json,text,html,xml格式的返回值,二进制的返回格式就会抛出这个异常。
因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。
文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。
解决方法:
1、用window.open() 或 window.location.href():
2、可以直接使用a标签实现文件下载:
1 | <a href="">点击下载</a> |
或
1 | var aLink = document.createElement('a'); |
3、可以使用jquery创建表单并提交实现文件下载:
1 | var form = $("<form>"); |
4、使用隐藏iframe或新窗体解决:
1 | export const downloadFile = (url) => { |
这个可以实现一次下载多个文件。