以ajax请求方式进行文件下载操作失败的原因及解决方案

摘要:
文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。

一、失败的原因

那是因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然可以读取到返回的response,但只是读取而已,是无法执行的,说白点就是js无法调用到浏览器的下载处理机制和程序。

二、解决方案

1)可以使用jquery创建表单并提交实现文件下载;

var form = $("<form>");
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",rootPath + "T_academic_essay/DownloadZipFile.do");
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","strZipPath");
input1.attr("value",strZipPath);
$("body").append(form);
form.append(input1);
form.submit();
form.remove();

2)可以直接使用a标签实现文件下载;

<a href=”下载地址”>点击下载</a>

3)使用隐藏iframe或新窗体解决。

免责声明:文章转载自《以ajax请求方式进行文件下载操作失败的原因及解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iframe高度动态自适应Javascript实现页面内元素添加滚动条下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

layui select动态添加option

<form class="layui-form" action=""> <div class="layui-form-item proSelect"> <label class="layui-form-label">产品类别</label> <div...

vue实战(4):postman测试数据、封装ajax、使用vuex管理状态

书到用时方恨少 这个阶段涉及到了vuex,本来想着不慌,用起来,使用的过程中问题还真不少 本篇涉及到的内容: ---postman 测试数据 ---封装 ajax 请求函数 ---封装接口请求函数 ---使用 vuex 管理状态 ---获取首页相关数据 0. 其它 vue实战(1):准备与资料整理vue实战(2):初始化项目、搭建底部导航路由vue实战...

Flask--wtforms快速使用和表单验证(附示例)

一、Form类   表单提供WTForms中最高级别的API。它们包含您的字段定义,委托验证,获取输入,聚合错误,并且通常用作将所有内容组合在一起的粘合剂。 class wtforms.form.Form 声明式表格基类。 __init__(formdata=None, obj=None, prefix='', data=None, meta=None,...

fetch 基本使用(使用fetch、axios来替代ajax)

一、fetch fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch、axios来替代ajax 二、安装 执行npm install whatwg-fetch --save即可安装。 为了兼容老版本浏览器,还需要安装npm install es6-promise --save 三、fet...

Java大文件分片上传/多线程上传组件

javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求     1. 通过form表单向后端发送请求          <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" m...

【转载】C# MVC 实现登录的5种方式

C# MVC 实现登录的5种方式     最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。    十年河东十年河西,莫欺少年穷。     学无止境,精益求精    小弟之前做过三月的MVC,后来又一直webForm开发,再后来,也就是现在做WPF,最近随着项目进入尾声,也就慢慢清闲了下来,清闲的时间甚是无聊,...