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

问题描述

前台jsfunctionExcel(){$.post("as.ashx,{"ExcelOUT":"1"},function(data,status){//$.messager.alert('提示',"文件输出成功");//重新加载datagrid//$("#tab").datagrid('reload');//关闭//$("#dd_dg").window('close');});}

ashx相当与我先在服务器生成一个文件,然后下载到客户端,我客户端下载代码stringRealFile=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";stringdownFile=System.IO.Path.GetFileName("11223344azx");//这里也可以随便取名stringEncodeFileName=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调用这段代码能弹出框,请问我该怎么做?网上搜的没看懂

解决方案

解决方案二:
求大神啊。。。。。。。。。。。。。。。。。。。
解决方案三:
ajax干不了这活。这样试试functionExcel(){var$input=$('<input>').attr({name:"ExcelOUT",value:"1"});var$form=$("<form>");$form.attr({target:'_self',method:'post',action:'as.ashx'}).append($input);$form.submit();}

解决方案四:
ajax确实干不了这活。要是你这种错误提示比较频繁,而且你有觉得错误提示的时候就刷新页面体验不好,可以先用ajax判断下错误,如果没有错误在刷新提交下载,要是你觉得下载最好不要刷新页面,你可以用iframe的形式触发下载链接,这样你的主页面基本上不会刷新
解决方案五:
引用2楼qbilbo的回复:

ajax干不了这活。这样试试functionExcel(){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啊
解决方案六:
引用4楼zlc532136013的回复:

Quote: 引用2楼qbilbo的回复:
ajax干不了这活。这样试试functionExcel(){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啊

不好意思,漏了一句:$(document.body).append($form);把这句加在$form.submit();前。
解决方案七:
在post数据之后,获得返回,然后你应该使用window.open打开页面用来下载。而当前页面并不刷新。不要在当前页面搞什么<form></form>,你怎么可能在一个使用ajax的页面去使用sbumit刷新页面呢?
解决方案八:
如果你的ExcelOUT参数根本不需要post,那么你就完全不应该使用post,你应该在window.open函数中在url参数中提供这个ExcelOUT。因此,你这个问题,根本不是post问题,也根本不是ajax问题。
解决方案九:
当你使用window.open函数来打开一个下载文件页面(你在Response消息头中明确表明这是下载用的消息)时,所有正规浏览器,都不会去显示一个新的页面,而是直接在当前浏览器开始下载(例如弹出下载对话框窗,或者不弹窗)。总之不会打开一个空白的浏览器窗口,或者就算是打开了,一瞬间又会自动关闭空白窗口。我猜你没有把jaavscript学好,所以才会第一时间想着用ajax来下载文件。
解决方案十:
你可以先通过$.post调用ashx先把这个文件写到服务器上,然后返回这个文件路径地址,再通过window.open("你的文件路径地址");就可以下载了
解决方案十一:
9楼的思路是对的。不过,你用这种方式,肯定是没有办法保存一个Excel文件在服务器本地的了。可以改用CloseXML.dll下载地址:,不行的话再另外找找调用代码十分简单:varwb=newClosedXML.Excel.XLWorkbook();wb.Worksheets.Add(dataTable);wb.SaveAs(fileFullPath);

解决方案十二:
先在浏览器里面F12看到底响应了什么结果
解决方案十三:
好像直接超链接请求就行了,响应的如果是文件类型数据,浏览器就弹出保存框了

时间: 2024-09-20 04:04:40