我发出 ExtJS AJAX 请求,并且希望向用户显示标准浏览器“另存为”对话框。要下载的文件可以是 pdf、jpg 或 png 文件。
目前 AJAX 请求已成功提交,但由于它是异步的,因此不会出现对话框。
我可以简单地不使用 AJAX,但是在发出请求之前我需要使用很多 javascript 代码,而且我真的不觉得将其重写为 java。
我的代码如下所示:
var params = getPrintInfo(form);
Ext.Ajax.request({
url : 'print',
method : 'POST',
params : {
customData: params.customData,
dpi: params.dpi,
format: params.format,
grid: params.grid,
title: params.title
},
autoAbort : false,
success : function(result, request) {
if(result.responseText==''){
//display error message
}else{
// display save as dialog box
}
}
});
在我的控制器中,我将标题设置为:
httpResponse.setHeader("Content-disposition", "attachment; filename=" + this.config.getString("print.file.name")+outputType);
EDIT:
实际上已经找到了这个解决方案:
Ext.DomHelper.append(document.body, {
tag: 'iframe',
frameBorder: 0,
width: 0,
height: 0,
css: 'display:none;visibility:hidden;height:1px;',
src: 'http://blabla.com/f75e927b-2041-473e-86ba-cbbc60dbc285.pdf'
});
现在的问题是:如何将 pdf 名称更改为更漂亮,例如 map.pdf,而不是使用那长而丑陋的字母数字字符串?