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

时间:2012-09-13 07:32:48

标签: ajax iframe extjs download extjs4.1

我需要使用servlet作为CSV文件下载数据。我通过Ajax Request点击从ExtJS 4.1到servlet的导航树传递一个参数。是否有任何替代方法将参数传递给servlet,因为ajax可以不要强制打开/保存对话框下载?我必须通过点击导航树本身的子项来传递参数。任何人都可以帮助我吗?

我搜索了解决方案并找到了隐藏的Iframe。我不知道如何将其改编成我的?

提前多多感谢。

1 个答案:

答案 0 :(得分: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"]]);

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