$.post 调用ashx 实现下载文件 弹不出框

来自星星的你_ 2016-02-18 05:03:25
前台js

function Excel()
{
$.post("as.ashx, { "ExcelOUT": "1" }, function (data,status) {
// $.messager.alert('提示', "文件输出成功");

//重新加载datagrid
// $("#tab").datagrid('reload');
//关闭
// $("#dd_dg").window('close');
});
}

ashx 相当与我先在服务器生成一个文件,然后下载到客户端,我客户端下载代码

string RealFile = HttpContext.Current.Server.MapPath("~/DownloadFile/" + filename);//真实存在的文件
if (!System.IO.File.Exists(RealFile))
{
HttpContext.Current.Response.Write("服务器上该文件已被删除或不存在!"); return;
}

context.Response.Buffer = true;
context.Response.Clear();
context.Response.ContentType = "application/download";
string downFile = System.IO.Path.GetFileName("11223344azx");//这里也可以随便取名
string EncodeFileName = HttpUtility.UrlEncode(downFile, System.Text.Encoding.UTF8);//防止中文出现乱码
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + EncodeFileName + ";");
context.Response.BinaryWrite(System.IO.File.ReadAllBytes(RealFile));//返回文件数据给客户端下载
context.Response.Flush();
context.Response.End();


现在保存的框就是弹不出来,我直接用服务器buttom调用这段代码能弹出框,请问我该怎么做? 网上搜的没看懂

...全文
405 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶飘尾 2016-02-23
  • 打赏
  • 举报
回复
好像直接超链接请求就行了,响应的如果是文件类型数据,浏览器就弹出保存框了
  • 打赏
  • 举报
回复
如果你的 ExcelOUT 参数根本不需要 post,那么你就完全不应该使用 post,你应该在 window.open 函数中在 url 参数中提供这个 ExcelOUT。 因此,你这个问题,根本不是 post 问题,也根本不是 ajax 问题。
  • 打赏
  • 举报
回复
在 post 数据之后,获得返回,然后你应该使用 window.open 打开页面用来下载。而当前页面并不刷新。 不要在当前页面搞什么 <form></form>,你怎么可能在一个使用 ajax 的页面去使用 sbumit 刷新页面呢?
qbilbo 2016-02-19
  • 打赏
  • 举报
回复
引用 4 楼 zlc532136013 的回复:
[quote=引用 2 楼 qbilbo 的回复:] ajax干不了这活。 这样试试
function Excel() {
        var $input = $('<input>').attr({ name: "ExcelOUT", value: "1" });
        var $form = $("<form>");
        $form.attr({ target: '_self', method: 'post', action: 'as.ashx' }).append($input);
        $form.submit();
}
调试进不去 ashx啊 [/quote] 不好意思,漏了一句:$(document.body).append($form); 把这句加在$form.submit();前。
  • 打赏
  • 举报
回复
引用 2 楼 qbilbo 的回复:
ajax干不了这活。 这样试试
function Excel() {
        var $input = $('<input>').attr({ name: "ExcelOUT", value: "1" });
        var $form = $("<form>");
        $form.attr({ target: '_self', method: 'post', action: 'as.ashx' }).append($input);
        $form.submit();
}
调试进不去 ashx啊
雨网科技 2016-02-19
  • 打赏
  • 举报
回复
ajax确实干不了这活。 要是你这种错误提示比较频繁,而且你有觉得错误提示的时候就刷新页面体验不好,可以先用ajax判断下错误,如果没有错误在刷新提交下载,要是你觉得下载最好不要刷新页面,你可以用iframe的形式触发下载链接,这样你的主页面基本上不会刷新
qbilbo 2016-02-19
  • 打赏
  • 举报
回复
ajax干不了这活。 这样试试
function Excel() {
        var $input = $('<input>').attr({ name: "ExcelOUT", value: "1" });
        var $form = $("<form>");
        $form.attr({ target: '_self', method: 'post', action: 'as.ashx' }).append($input);
        $form.submit();
}
  • 打赏
  • 举报
回复
求大神啊。。。。。。。。。。。。。。。。。。。
  • 打赏
  • 举报
回复
先在浏览器里面F12看到底响应了什么结果
吉普赛的歌 2016-02-19
  • 打赏
  • 举报
回复
9楼的思路是对的。 不过, 你用这种方式, 肯定是没有办法保存一个Excel文件在服务器本地的了。 可以改用 CloseXML.dll 下载地址:http://www.dllzj.com/ClosedXML.dll/ , 不行的话再另外找找 调用代码十分简单:
var wb = new ClosedXML.Excel.XLWorkbook();
wb.Worksheets.Add(dataTable);
wb.SaveAs(fileFullPath);
  • 打赏
  • 举报
回复
你可以先通过$.post调用ashx先把这个文件写到服务器上,然后返回这个文件路径地址,再通过 window.open("你的文件路径地址");就可以下载了
  • 打赏
  • 举报
回复
当你使用 window.open 函数来打开一个下载文件页面(你在 Response 消息头中明确表明这是下载用的消息)时,所有正规浏览器,都不会去显示一个新的页面,而是直接在当前浏览器开始下载(例如弹出下载对话框窗,或者不弹窗)。总之不会打开一个空白的浏览器窗口,或者就算是打开了,一瞬间又会自动关闭空白窗口。 我猜你没有把 jaavscript 学好,所以才会第一时间想着用 ajax 来下载文件。

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧