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 另存为对话框的主要内容,如果未能解决你的问题,请参考以下文章

返回“另存为”对话框 powerbuilder

AppleScript“另存为”对话框?

程序中的对话框应用- ”另存为“对话框

用于在另存为对话框中将工作表另存为预命名文件的 VBA 代码

单词。不带对话框窗口另存为 PDF

通过 jQuery GET 强制“另存为”对话框