一开始想通过Ajax异步方式(Ext.Ajax.request())实现文件下载,却一直没有成功。 在firebug中查看response的时候,发现Ajax异步方式,服务器端将文件的2进制流写入了XMLHTTPRequest对象,于是一直无法将文件取出。 其实一开始的时候思路就是错的,下载文件不能通过异步方式实现。 那么怎样在Extjs中实现Ajax式(不刷新页面,只弹出下载对话框)的下载呢? 只需要在body中创建一个隐藏(hidden)表单(form)就可以了。 比如下载按钮的handler可以写成下面这种形式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| handler : function () { var body = Ext.getBody(); var frame = body.createChild({ tag: 'iframe' , cls: 'x-hidden' , id: 'iframe' , name: 'iframe' });
var form = body.createChild({ tag: 'form', cls: 'x-hidden', id: 'form', action: 'your-action-URL', target: 'iframe' });
form.dom.submit(); }
|