gpt4 book ai didi

javascript - ExtJS 4 - 如何使用 Ajax 下载文件?

转载 作者:行者123 更新时间:2023-12-04 22:44:07 25 4
gpt4 key购买 nike

我有一个包含各种文本字段和两个按钮的表单 - 导出到 Excel 和导出到 CSV。

用户可以为表单中的不同字段提供值,然后单击其中一个按钮。

预期的行为是应该触发一个 Ajax 请求,将字段的值作为参数,并且应该下载所选文件(根据单击按钮的 Excel/CSV)(我没有提交表单,因为需要完成在提交之前对值进行一些处理)。

我在Ajax请求下载的成功函数中使用了下面的代码:

result  =   Ext.decode(response.responseText);

try {
Ext.destroy(Ext.get('testIframe'));
}

catch(e) {}

Ext.core.DomHelper.append(document.body, {
tag: 'iframe',
id:'testIframe',
css: 'display:none;visibility:hidden;height:0px;',
src: result.filename,
frameBorder: 0,
width: 0,
height: 0
});

当在服务器上物理创建文件时,上面的代码可以正常工作。但在我当前的项目中,文件不是在服务器上创建的,而是内容只是通过适当的 header 流式传输到浏览器。

因此,当文件不在服务器上时,有没有办法使用 Ajax 下载文件?只是补充一点,我有一长串参数需要发送到服务器,因此不能将它们全部添加到 iframe 的 src。

有人可以指导吗?

提前感谢您的帮助。

最佳答案

你可以像这样使用组件:

Ext.define('CMS.view.FileDownload', {
extend: 'Ext.Component',
alias: 'widget.FileDownloader',
autoEl: {
tag: 'iframe',
cls: 'x-hidden',
src: Ext.SSL_SECURE_URL
},
stateful: false,
load: function(config){
var e = this.getEl();
e.dom.src = config.url +
(config.params ? '?' + Ext.urlEncode(config.params) : '');
e.dom.onload = function() {
if(e.dom.contentDocument.body.childNodes[0].wholeText == '404') {
Ext.Msg.show({
title: 'Attachment missing',
msg: 'The document you are after can not be found on the server.',
buttons: Ext.Msg.OK,
icon: Ext.MessageBox.ERROR
})
}
}
}
});

将它放在视口(viewport)中的某处,例如:

{
region: 'south',
html: 'South',
items: [
{
xtype: 'FileDownloader',
id: 'FileDownloader'
}
]
}

不要忘记在视口(viewport)类中要求它:

requires: [
'CMS.view.FileDownload'
]

Action 处理程序可能如下所示:

var downloader = Ext.getCmp('FileDownloader')
downloader.load({
url: '/attachments/' + record.get('id') + '/' + record.get('file')
});

在响应中包含 Content-Disposition header 非常重要,否则不会下载任何内容。

问候去 http://www.quispiam.com/blog/post.php?s=2011-06-09-download-a-file-via-an-event-for-extjs4这东西对我有用。

关于javascript - ExtJS 4 - 如何使用 Ajax 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com