在不使用 Ajax 请求的情况下使用 ExtJS 4.1 将文件下载为 CSV 的替代方法?

Posted

技术标签:

【中文标题】在不使用 Ajax 请求的情况下使用 ExtJS 4.1 将文件下载为 CSV 的替代方法?【英文标题】:Alternate way for downloading file as CSV using ExtJS 4.1 without using Ajax Request? 【发布时间】:2012-09-13 07:32:48 【问题描述】:

我需要使用 servlet 作为 CSV 文件下载数据。我通过单击从 ExtJS 4.1 到通过 Ajax 请求的 servlet 的导航树来传递参数。有没有其他方法可以将参数传递给 servlet,因为 ajax 可以't force the open/save dialog to download?我必须通过单击导航树本身的子项来传递参数。有人可以帮我吗?

我搜索了解决方案,发现像隐藏的 iframe。我不知道如何将它改编成我的?

非常感谢。

【问题讨论】:

【参考方案1】:

使用在命名空间中定义的帮助器。完成后不要忘记将其删除。

helper.util.HiddenForm = function(url,fields)
    if (!Ext.isArray(fields))
        return;
    var body = Ext.getBody(),
        frame = body.createChild(
            tag:'iframe',
            cls:'x-hidden',
            id:'hiddenform-iframe',
            name:'iframe'
        ),
        form = body.createChild(
            tag:'form',
            cls:'x-hidden',
            id:'hiddenform-form',
            action: url,
            target:'iframe'
        );

    Ext.each(fields, function(el,i)
        if (!Ext.isArray(el))
            return false;
        form.createChild(
            tag:'input',
            type:'text',
            cls:'x-hidden',
            id: 'hiddenform-' + el[0],
            name: el[0],
            value: el[1]
        );
    );

    form.dom.submit();

    return frame;

像这样使用它

helper.util.HiddenForm('my/realtive/path', [["fieldname","fieldValue"]]);

如果服务器回答下载,则会弹出保存窗口。

【讨论】:

以上是关于在不使用 Ajax 请求的情况下使用 ExtJS 4.1 将文件下载为 CSV 的替代方法?的主要内容,如果未能解决你的问题,请参考以下文章

CORS 谷歌浏览器扩展有啥替代品吗?如何在不使用 CORS 的情况下成功发出 ajax 请求?

jquery 或 javascript 中有没有一种方法可以在不使用 ajax 请求的情况下在页面加载时填充下拉列表?

ExtJS 3.3.0 在不知道 ID 的情况下禁用按钮

EXTJS 4.1 如何在不重新加载 TreeStore 的情况下删除过滤器

ajax异步刷新请求数据

Extjs6 带有filefield 的form 对相应的处理不常规问题分析