ajax不能下载文件问题处理
2018-03-18 16:32
441 查看
有个页面要完成文件下载功能。
实现的方式是,html中有个form表单(没有任何表单控件),需要下载的时候,改一下action值,提交form,over。
突然觉得这样太麻烦了,如果用ajax代码更简洁一些。于是就下手试了一下,才发现ajax根本没法完成下载文件的功能。这才意识到当初选择用form方法下载文件是有原因的,只是时间长了给忘了,现在就记录一下,为什么ajax不行。
1、ajax方式请求的数据只能存放在javascipt内存空间,可以通过javascript访问,但是无法保存到硬盘,因为javascript不能直接和硬盘交互,否则将是一个安全问题。
2、还有一个原因,就是处理服务器的响应问题。浏览器接收response会做相应的处理,处理的方式有很多,但是ajax不能和浏览器相比,它发出的请求数据是文本类型的,对于二进制的响应,ajax最多能做的就是读取。
所以,如果要下载文件,一般采取的方法有:
1、form提交,可以是写在html中的固定代码,也可以是js动态生成,总之效果都是完成一次form表单提交。
2、超链接下载。
jquery的ajax详解
PS:AJAX请求 $.ajax方法的使用
使用jQuery的$.ajax方法可以更为详细的控制AJAX请求。它在AJAX请求上施加细粒度级别的控制。
$.ajax方法语法
options详细范围值
实现的方式是,html中有个form表单(没有任何表单控件),需要下载的时候,改一下action值,提交form,over。
突然觉得这样太麻烦了,如果用ajax代码更简洁一些。于是就下手试了一下,才发现ajax根本没法完成下载文件的功能。这才意识到当初选择用form方法下载文件是有原因的,只是时间长了给忘了,现在就记录一下,为什么ajax不行。
1、ajax方式请求的数据只能存放在javascipt内存空间,可以通过javascript访问,但是无法保存到硬盘,因为javascript不能直接和硬盘交互,否则将是一个安全问题。
2、还有一个原因,就是处理服务器的响应问题。浏览器接收response会做相应的处理,处理的方式有很多,但是ajax不能和浏览器相比,它发出的请求数据是文本类型的,对于二进制的响应,ajax最多能做的就是读取。
所以,如果要下载文件,一般采取的方法有:
1、form提交,可以是写在html中的固定代码,也可以是js动态生成,总之效果都是完成一次form表单提交。
2、超链接下载。
jquery的ajax详解
PS:AJAX请求 $.ajax方法的使用
使用jQuery的$.ajax方法可以更为详细的控制AJAX请求。它在AJAX请求上施加细粒度级别的控制。
$.ajax方法语法
$.ajax(options) | |
参数 | |
options | (对象)一个对象的实例,其属性定义这个操作的参数。详情见下表。 |
返回值 | XHR实例 |
名称 | 类型 | 描述 |
url | 字符串 | 请求的url地址 |
type | 字符串 | 将要使用的HTTP方法。通常是POST或GET。如果省略,则默认为GET |
data | 对象 | 一个对象,其属性作为查询参数而传递请求。如果是GET请求,则把数据作为查询字符串传递;如果是POST请求,则把 4000 数据作为请求体传递。在这两种情况下,都是由$.ajax()实用工具函数来处理值的编码 |
dataType | 字符串 | 一个关键字,用来标识预期将被响应所返回的数据的类型。这个值决定再把数据传递给回调函数之前(如果有)进行什么后续处理。有效值如下: xml-响应文本被解析为XML文档,而作为结果的XML DOM被传递给回调函数 html-响应文本未经处理就被传递给回调函数。在已返回HTML片段内的任何<script>块将被求值 json-响应文本被求值为JSON字符串,而作为结果的对象被传递给回调函数 jsonp-与json相似,不同之处是提供远程脚本支持(假定远程服务器支持) script-响应文本被传递给回调函数。在任何回调函数被调用之前,响应被作为一个或多个JavaScript语句而进行处理 text-响应文本被假定为普通文本。服务器资源负责设置适当的内容类型响应标头。如果省略这个属性,则不对响应文本进行任何处理或求值就传递给回调函数 |
timeout | 数值 | 设置Ajax请求的超时值(毫秒)。如果请求在超时值到期之前仍未完成,则中止请求并且调用错误回调函数(如果已定义) |
global | 布尔型 | 启用或禁用全局函数的触发。这些函数可以附加到元素上,并且在Ajax调用的不同时刻或状态下触发。默认启用全局函数触发 |
contentType | 字符串 | 将要在请求上指定的内容类型。默认为application/x-www-form-urlencoded(与表单提交所使用的默认类型相同) |
success | 函数 | 如果请求的响应指示成功状态码,则这个函数被调用。响应体作为第一个参数被返回给这个函数,并且根据指定的dataType属性进行。第二个参数是包含状态码的字符串—这种情况下永远为成功状态码 |
error | 函数 | 如果请求的响应返回错误状态码,则这个函数被调用。三个实参被传递给这个函数:XHR实例、状态消息字符串(在这种情况下永远为错误状态码)以及XHR实例所返回的异常对象(可选) |
complete | 函数 | 请求完成时被调用。两个实参被传递:XHR实例和状态消息字符串(成功状态码或错误状态码)。如果也指定了success或error回调函数,则这个函数在success或error回调函数调用之后被调用 |
beforeSend | 函数 | 在发起请求之前被调用。这个函数被传递XHR实例,并且可以用来设置自定义的标头或执行其他预请求操作 |
async | 布尔型 | 如果指定为false,则请求被提交为同步请求。在默认的情况下,请求是异步的 |
processData | 布尔型 | 如果设置为false,则阻止已传递数据被加工为URL编码格式。默认情况下,数据被加工为URL编码格式(适用于类型为application/x-www-form-urlencoded的请求) |
ifModified | 布尔型 | 如果设置为true,则自从上一次请求以来,只有在响应内容没有改变的情况下(根据Last-Modified标头)才允许请求成功。如果省略,则不执行标头检查 |
相关文章推荐
- 关于qq邮箱 "该文件已达到200次的下载限制,您已不能下载该文件" 的问题处理
- 由Ajax请求一般处理程序下载文件引发的问题后的一些总结
- ajaxFileUpload上传文件时IE浏览器弹出下载提示问题处理
- 在ashx一般处理程序文件中不能使用session和request的问题解决办法
- 解决firefox保存winrar时不能勾选“以后自动采用相同的动作处理此类文件”的问题
- 解决下载文件过大而不能下载的问题.... 分类: tomcat 2009-11-06 23:24 404人阅读 评论(0) 收藏
- windows2003系统的iis不能下载exe文件问题的解决
- java下载远程http地址的图片文件到本地-自动处理图片是否经过服务器gzip压缩的问题
- Python处理MLDonkey 下载中文文件乱码问题 (2)
- Python处理MLDonkey 下载中文文件乱码问题
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- IIS6.0下ISO 、GHO等文件不能下载问题的解决方法
- Response对象、HttpServletResponse简介、处理字节编码问题、实现动态文件下载
- ashx灵活处理文件下载问题
- IIS做web server有些中文名文件不能下载,显示不全的问题
- 解决http下载部分文件格式(如*.pdb)不能正常下载的问题
- 在ashx一般处理程序文件中不能使用session和request的问题解决办法
- Python处理MLDonkey 下载中文文件乱码问题
- 【转】利用ftpclient下载文件,解决用window.open打开ftp地址中有中文,不能下载的问题