时间:2021-05-26
jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。
废话少说,直接进入正题,我们先来分析一下失败的原因
一、失败的原因
那是因为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或新窗体解决。
PS:AJAX请求 $.ajax方法的使用
使用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-plete invoke! status:' + status+'<br/>'); }, //发送请求前触发 beforeSend: function (xhr) { //可以设置自定义标头 xhr.setRequestHeader('Content-Type', 'application/xml;charset=utf-8'); show.append('beforeSend invoke!' +'<br/>'); }, //是否使用异步发送 async: true }) });})</script></head><body><select id="selectNum"> <option value="0">--Select--</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option></select><div id="show"></div></body></html>
服务端主要代码:
protected void Page_Load(object sender, EventArgs e){ if (!Page.IsPostBack) { if (Request["id"] != null && !string.IsNullOrEmpty(Request["id"].ToString())) { //启用该句会引发ajax超时异常 // System.Threading.Thread.Sleep(3000); Response.Write(GetData(Request["id"].ToString())); } }}protected string GetData(string id){ string str = string.Empty; switch (id) { case "1": str += "This is Number 1"; break; case "2": str += "This is Number 2"; break; case "3": str += "This is Number 3"; break; default: str += "Warning Other Number!"; break; } return str;}运行程序,结果如图:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在使用Mac的蓝牙传文件,有些文件无法传输,它提示:文件传输失败不支持的项目或操作,那么该怎么办?下面我们就来分析这个问题原因和解决办法,请看下文详细介绍。1、
在使用JQuery的Ajax从服务器请求数据或者向服务器发送数据时常常会遇到跨域无法请求的错误,常用的解决办法就是在Ajax中使用JSONP。基于安全性考虑,浏
电脑上qq打不开的原因及解决办法是: 1、软件自身损坏,文件不完整 解决方法:打开qq官网首页,点下载链接开始下载,下载之后安装即可。 2、系统组策略禁止
企业微信添加好友失败的原因及解决方法如下: 1、手机所在的网络不是4G网络。解决办法:更改网络设置,将网络设置为4G网。 2、被对方添加为黑名单。解决办法:
原因:1、APK本身有缺陷。可以更换下载平台下载或重新下载解决。回2、系统中已经存在程序,请答卸载该程序解决。3、系统空间不足,也会出现安装失败的情况。解决办法