很难搞清楚这一点。我需要在ExtJS应用程序中提交表单,然后在.CSV文件中下载数据。问题是,ExtJS让我用“isUpload”提交表单的方式我正在POST的参数被发送为“mulitpart / form-data”,我不能使用它们或解析它们。我有相同输入字段名称的多个值。
field: A
field: B
field: C
当我提交我的网格时,他们会像上面那样多个实例。一旦我将“isUpload”引入表单,它们就会出现:
field: A,B,C
我的程序将字段读为“A,B,C”,而不是三个单独的字段实例!
这是我的代码。有趣的是,当我在Firebug中检查时,Params选项卡看起来是正确的,但POST选项卡则具有一个值。
我最近刚将这些参数添加到网址中以尝试伪造它!
Ext.Ajax.request({
url : '/cgi-bin/cgijson007.pgm' + '?' + parameters,
form : myForm,
params : parameters,
standardSubmit : true,
isUpload : true
});
答案 0 :(得分:2)
isUpload:true仅定义您要将文件与字段一起上传,因此多部分是正确的。要下载,我建议您使用隐藏的框架。为此,使用在命名空间中定义的帮助程序。
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;
}
// Use it like
helper.util.HiddenForm('my/realtive/path', [["fieldname","fieldValue"]]);
如果服务器通过下载应答,则会弹出保存窗口。
答案 1 :(得分:0)
以下是我如何处理网格列表中的帖子下载:
首先,我创建html表单容器,隐藏字段包含要发布的参数,还有一个提交函数。
var txtFileId = Ext.create('Ext.form.field.Hidden', { name: 'fid', value: 0 });
var dwFrm = Ext.create('Ext.container.Container', {
autoEl: { tag: 'form', method: 'POST', target: '_BLANK',
action: '/download/files' }, style: { hidden: true },
items: [txtFileId, {
xtype: 'hidden', name: 'userId', value: '1111'
}],
submit: function (fid) {
if (fid) {
txtFileId.setValue(fid);
this.el.dom.submit();
}
}
});
其次,我将上面的组件停靠在网格的工具栏中
var grid = Ext.create('Ext.grid.Panel', {
.....
dockedItems: [Ext.create("Ext.Toolbar", {
dock: "top", items: [
dwFrm,
{ text: "Download Selected",
handler: function () {
var sm = grid.getSelectionModel();
if (!sm.hasSelection()) return null;
var recs = sm.getSelection();
dwFrm.submit(recs.data.id);
}
}
]
})]
.....
});
答案 2 :(得分:0)
这完美无缺。包含数组。
downloadFile: function (url, params) {
debugger;
var body = Ext.getBody(),
frame = body.createChild({
tag: 'iframe',
cls: 'x-hidden',
id: 'hiddenform-iframe',
name: 'iframe'
}),
form = body.createChild({
tag: 'form',
method: 'POST',
cls: 'x-hidden',
id: 'hiddenform-form',
action: url,
target: 'iframe'
});
for (var i in params) {
if (Ext.isArray(params[i])) {
for (var j = 0; j < params[i].length; j++) {
form.createChild({
tag: 'input',
type: 'hidden',
cls: 'x-hidden',
id: 'hiddenform-' + i,
name: i,
value: params[i][j]
});
}
} else {
form.createChild({
tag: 'input',
type: 'hidden',
cls: 'x-hidden',
id: 'hiddenform-' + i,
name: i,
value: params[i]
});
}
}
form.dom.submit();
return frame;
}