Ajax请求ashx一般处理程序实现文件下载
具体功能为,在文件数据列表中选择一行,点击表格上方的下载按钮,下载文件。由于表格中不包含文件路径,只能取到在数据库表中的ID,所以具体实现就是这样:首先点击一行,获取点击的一行数据的ID,用Ajax传值到Ashx服务文件,在Ashx中根据ID取到文件路径,转换为服务器虚拟路径后返回到Web页面。在Web页面中用Ajax进行下载。
一开始尝试过直接在Ashx服务处理中response.writeFile(),结果不能下载,原因可能是因为Ajax请求,而返回的时候直接返回到了Ajax的回调函数中。于是只好取到文件的路径后直接返回回调函数,然后在回调函数路面下载。
在网上找到好多种下载方式,用jQuery来处理文件路径最多的建议就是window.href=url,可能很多需求并不是下载文件,而是重定向吧。如果下载文件这样写也是可以的,只不过用户体验不好,点击下载后就跳转页面了,下载完还要后退或者怎么样。所以我就没有用这种方式。
下面还是讲讲我用的方法吧,比较巧妙。就是先在页面中添加一个隐藏的a标签,让其隐藏,在获取到文件路径的时候赋值给a的href,然后触发a标签的click事件就行了。
<a id="dp" href="" style="display: none;"><span id="fp"></span></a>
这里a标签如果直接触发的话没有用,所以在其中加了一个span标签,触发的span标签的click事件就可以了。
function Download() {
//在选择某行的时候给rowid赋值,这里取值即可
var id = $("#rowid").val(); $.ajax({
type: "POST",
url: "Download.ashx",
dataType: "json",
data: {
action: "DownLoad",
id: id
},
success: function (data) {
if (data != null || data != "") {
//获取返回的文件路径
var path = data[]["path"].toString();
//给a标签赋值
$("#dp").attr("href", path);
//这里的fp是a标签中的span标签的ID
$("#fp").click();
}
else {
alert("文件不存在");
}
}
});
}
这的确是一个比较实用的小诀窍,这下再也不用担心Ajax文件下载的问题啦。
Ajax请求ashx一般处理程序实现文件下载的更多相关文章
- Ajax请求ashx返回各类数据的常见处理方式
.请求text数据,在success事件中手动解析 前台: $.ajax({ type: "post", url: "checkFile.ashx", data ...
- ajax请求ashx跨域问题解决办法
ajax请求ashx跨域问题解决办法 https://blog.csdn.net/windowsliusheng/article/details/51583566 翻译windowsliusheng ...
- jQuery Ajax请求 .net 一般处理程序
初学ajax 一个简单的功能,调试了2个小时,代码如下虽然成功了 但是有错误 <!DOCTYPE html> <html> <head> <meta http ...
- Ajax请求ashx 返回 json 格式数据常见问题
问题:ashx 返回的字符串json格式,在前台ajax自动解析失败. 问题分析:经过排查,发现是拼接json时出现” ’ “单引号,jquery无法解析,用” “ “双引号才可以.例如: stri ...
- Ajax请求 一般处理程序参数传递的几种方式
//第一种Ajax请求 $.ajax({ type:"GET", //请求类型,有get,post等类型,和表单提交是一样的 url:"Result.aspx" ...
- jquery.ajax请求aspx和ashx的异同 Jquery Ajax调用aspx页面方法
1.jquery.ajax请求aspx 请求aspx的静态方法要注意一下问题: (1)aspx的后台方法必须静态,而且添加webmethod特性 (2)在ajax方法中contentType必须是“a ...
- AJAX通过HTML请求C#一般处理程序
AJAX通过HTML请求C#一般处理程序 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...
- Ajax与ashx异步请求的简单案例
Ajax与ashx异步请求的简单案例: 前台页面(aspx): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- .net Ajax与后台一般处理程序(ashx) 交互
本文主要实现无动态刷新查询后台数据功能,主要用到ajax+ashx+sqlserver进行交互. 首先需要引用Jquery: <script language="javascript& ...
随机推荐
- Mysql中查看表的类型InnoDB
问题描述: MySQL 数据表主要支持六种类型 ,分别是:BDB.HEAP.ISAM.MERGE.MYISAM.InnoBDB. 这六种又分为两类,一类是“事务安全型”(transaction-s ...
- .NET中ToString()的用法
一.数字转换到字符串 格式说明符 说明 示例 输出 C 货币 2.5.ToString(& ...
- Splunk < 6.3 版本 SSL 证书过期事宜
最近Splunk发出邮件提醒客户SSL证书过期事宜. 问题看起来比较严重,因为所有的实例,包括 forwarder\peernode\indexer\master node 等等都受影响,而且Depl ...
- Uncaught TypeError: Cannot read property 'post' of undefined
- 【转】谈Objective-c block的实现
本文转自http://blog.devtang.com/blog/2013/07/28/a-look-inside-blocks/,如有侵权,请联系我删除 前言 这里有关于block的5道测试题,建议 ...
- 为什么java不支持多重继承?
什么是钻石问题?如下图所示,B和C继承于A,D继承B和C(多重继承),在D中调用A的方法时,无法判断是调用B中的实现还是C的实现,下图继承关系是个菱形,所以该问题又叫做菱形问题. 如果java要解决这 ...
- windows 进程间通讯方法
Windows平台为我们提供了多种进程间通信的机制,主要包括:注册表方式.共享文件方式.共享内存方式.共享数据段.映射文件方式.管道方式. 剪贴板方式.消息方式.其中注册表方式需要增加注册表表项,而注 ...
- Linux文件/目录权限整理
- Linux中Curl命令couldn't connect to host解决方案 php操作Curl(http,https)无法获取远程数据解决方案
本人在做百度账户第三方登录接口,获取百度token,利用php操作curl post方式发送请求token,出现couldn't connect to host错误.经过调试测试,最后终于成功.回头写 ...
- ssh 无密码登录远程服务器
在讲下文之前,我都默许大家都已经生成了自己的ssh公钥和密钥,在自己的~/.ssh 目录下面,如果没有,请使用 ssh-keygen -t rsa -C "你的邮箱" 命令生成 1 ...