jQuery确实是一个挺好的轻量级的JS框架,能帮助咱们快速的开发JS应用,并在必定程度上改变了咱们写JavaScript代码的习惯。html
1、失败的缘由jquery
那是由于response缘由,通常请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,虽然能够读取到返回的response,但只是读取而已,是没法执行的,说白点就是js没法调用到浏览器的下载处理机制和程序。ajax
2、解决方案json
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标签实现文件下载;app
<a href=”下载地址”>点击下载</a>框架
3)使用隐藏iframe或新窗体解决。异步
PS:AJAX请求 $.ajax方法的使用async
使用jQuery的$.ajax方法能够更为详细的控制AJAX请求。它在AJAX请求上施加细粒度级别的控制。
$.ajax方法语法
$.ajax(options)
参数
options
(对象)一个对象的实例,其属性定义这个操做的参数。详情见下表。
返回值
XHR实例
options详细范围值
名称
类型
描述
url
字符串
请求的url地址
type
字符串
将要使用的HTTP方法。一般是POST或GET。若是省略,则默认为GET
data
对象
一个对象,其属性做为查询参数而传递请求。若是是GET请求,则把数据做为查询字符串传递;若是是POST请求,则把数据做为请求体传递。在这两种状况下,都是由$.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标头)才容许请求成功。若是省略,则不执行标头检查
下面看个例子,尽量多的用到options中的选项