我收到了以下ajax电话:
var blind = Ext.create('MyApp.view.blind.Progress', {});
blind.show();
Ext.Ajax.request({
url: config.url,
params: {
nodeId: config.data[0].value,
fileName: config.data[1].value,
startDateTime: config.data[2].value,
endDateTime: config.data[3].value,
reportFormat: config.data[4].value
},
success: function (response) {
console.log(response);
blind.close();
}
});
我想显示带有加载图形的窗帘,并在完成后关闭它。有没有办法使用这个ajax回调从响应中下载文件?我是在正确的轨道上吗?我想避免使用iframe或尽可能打开新标签。如果它更容易,我愿意使用像jquery这样的其他库。
答案 0 :(得分:0)
不要认为可以用ajax请求回复文件。一个简单的表单提交应该可以解决问题。
答案 1 :(得分:0)
好吧,我不喜欢被告知我不能做什么,所以我一直在研究并找到了这个jquery插件。它的工作原理是在文件传递时轮询服务器生成的cookie,以及下载文件的典型iframe方法。没有膨胀,没有闪光,正是我所寻找的:
下载插件,将其链接到您站点的某个位置,并将此cookie生成代码添加到您的文件请求所在的位置(链接中有更多示例,我使用的是ASP.NET):
HttpContext.Current.Response.SetCookie(new HttpCookie("fileDownload", "true") { Path = "/" });
我的应用程序中的示例代码,使用插件的成功和失败回调来控制我的extjs盲目:
$.fileDownload(config.url, {
successCallback: function (url) {
//Show a message here or perform some task
blind.close();
},
failCallback: function (html, url) {
blind.close();
alert("The report generation failed.");
},
httpMethod: "POST",
data: {
nodeId: config.data[0].value,
fileName: config.data[1].value,
startDateTime: config.data[2].value,
endDateTime: config.data[3].value,
reportFormat: config.data[4].value
}
});