ExtJS AJAX 另存为对话框
Posted
技术标签:
【中文标题】ExtJS AJAX 另存为对话框【英文标题】:ExtJS AJAX save as dialog box 【发布时间】:2012-02-27 15:15:14 【问题描述】:我发出一个 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);
编辑:
居然找到了这个解决方案:
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,而不是使用长而丑陋的字母数字字符串?
【问题讨论】:
【参考方案1】:您可以使用window.open来另存为对话框,例如
window.open('print?parameters...','_blank');
【讨论】:
这个short of 做我想要的。唯一的问题是,当我的回复回来时,一个新标签会立即打开并立即关闭,这不是很好。以上是关于ExtJS AJAX 另存为对话框的主要内容,如果未能解决你的问题,请参考以下文章