[轉]ExtJS中Ajax实现File Download
Ajax的处理都是异步的,所以想实现文件下载这种同步的操作,就比较捉襟见肘。
不过google了一下,找到了一个方法,当然不是完美
主旨就是提交一个request,在server端将文件生成好,然后返回文件名,
client端则在js中隐藏一个frame,将frame的src指向生成的文件(根据返回的文件名)
client:
Ext.Ajax.request({
url: '/csvoutput/',
success: function(r, o) {
obj = Ext.util.JSON.decode(r.responseText);
try {
Ext.destroy(Ext.get('downloadIframe'));
}
catch(e) {}
Ext.DomHelper.append(document.body, {
tag: 'iframe',
id:'downloadIframe',
frameBorder: 0,
width: 0,
height: 0,
css: 'display:none;visibility:hidden;height:0px;',
src: obj.filename
});
},
failure: function(r, o){
},
headers: {
'my-header': 'csvoutput'
},
params: { }
});
server:(django)
result = {}
result['filename'] = filename
result['success'] = True
return HttpResponse(simplejson.dumps(result), mimetype='text/javascript')
不过google了一下,找到了一个方法,当然不是完美
主旨就是提交一个request,在server端将文件生成好,然后返回文件名,
client端则在js中隐藏一个frame,将frame的src指向生成的文件(根据返回的文件名)
client:
Ext.Ajax.request({
url: '/csvoutput/',
success: function(r, o) {
obj = Ext.util.JSON.decode(r.responseText);
try {
Ext.destroy(Ext.get('downloadIframe'));
}
catch(e) {}
Ext.DomHelper.append(document.body, {
tag: 'iframe',
id:'downloadIframe',
frameBorder: 0,
width: 0,
height: 0,
css: 'display:none;visibility:hidden;height:0px;',
src: obj.filename
});
},
failure: function(r, o){
},
headers: {
'my-header': 'csvoutput'
},
params: { }
});
server:(django)
result = {}
result['filename'] = filename
result['success'] = True
return HttpResponse(simplejson.dumps(result), mimetype='text/javascript')
申明
非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!
博文欢迎转载,但请给出原文连接。