前台我用EXTJS AJXA 传一些数据到后台
Ext.Ajax.request({ url: "/InConsignation/MakePDF", params: { id: items[0].getData() }, success: function (response) { } });
后台就是下载文件的代码
public ActionResult MakePDF(string id){ string fileName = "QQ五笔.exe";//客户端保存的文件名 string filePath = Server.MapPath("../../DownLoad/QQWubi_Setup.exe");//路径 FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.Charset = "UTF-8"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("UTF-8"); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename="+ fileName); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); return new EmptyResult(); }
这样 什么反应都没有 断点走了 都不报错 前台也能得到回调信息 可就是不弹出下载文件的提示框
我试验了 不用EXTJS AJAX 用From post到后台 可以正常下载
犹豫项目用EXTJS 求大神帮解决一下
动态构建一个 form 来 post 即可,比如用 JQuery,可以这么写:
/* * 动态构建一个Form 并且提交 */ $.dynamicSubmit = function (url, datas) { var form = $('#dynamicForm'); if (form.length <= 0) { form = $("<form>"); form.attr('id', 'dynamicForm'); form.attr('style', 'display:none'); form.attr('target', ''); form.attr('method', 'post'); $('body').append(form); } form = $('#dynamicForm'); form.attr('action', url); form.empty(); if (datas && typeof (datas) == 'object') { for (var item in datas) { var $_input = $('<input>'); $_input.attr('type', 'hidden'); $_input.attr('name', item); $_input.val(datas[item]); $_input.appendTo(form); } } form.submit(); }
可以这么调用:
$.dynamicSubmit("/InConsignation/MakePDF",{id:'123456789'});
谢谢朋友 实在不行 我也只能这样了 我看看EXTjs 还能有啥突破不 在等等其他朋友的答案
那是因为返回的数据被ajax接受的,弹出下载框的是浏览器.
ajax不会去管你传过来的文件,
而且本身文件下载就完全没有必要用ajax
你好,可是 我必须前台回传信息 后台才能知道我要下载的事那个文件啊 请问如何解决
@请求: 可以动态拼接URL让用户点.